美文网首页
使用 Apache httpd 部署 https 服务

使用 Apache httpd 部署 https 服务

作者: JSON_NULL | 来源:发表于2018-06-06 12:04 被阅读172次

    此篇不是教程,而是笔记。鄙人并未对 此中技术有什么深刻的理解,只是因工作需要部署了两次。因每次部署都需要查阅大量资料很浪费时间,所以把部署的过程记录在此,方便以后再次部署查阅。

    注意:此篇是在 CentOS 6.9 环境下做的实践。

    使用 Apache httpd 部署 https 服务,大概分为三步:

    1. 安装 httpd 软件 和 mod_ssl 模块
    2. 申请 ssl 证书
    3. 配置 Apache httpd 中的 mod_ssl 模块

    安装 httpd 软件 和 mod_ssl 模块

    yum install -y httpd mod_ssl
    

    申请 ssl 证书

    我了解的 ssl 证书类型有 ECC 和 RSA,Apache httpd 中的 mod_ssl 模块对这两类证书应该是都支持的。此篇实践中使用的是RSA类型的 ssl 证书。

    此篇中所使用的 ssl 证书是在 freessl.org 网站申请的。还有其它很多可以免费申请 ssl 证书的网站,有兴趣者可以去探索。如有发现其他可免费申请 ssl 证书的网站,欢迎反馈到评论区中,供需要者参考。

    从 freessl.org 上申请下来证书后,会得到一个压缩包,压缩包内包含两个文件(此篇实践时为此,以后可能会有变化)full_chain.pem 和 private.key。

    其中 private.key 是私钥文件,full_chain.pem 中包含了 证书 和 ca证书 内容。我们在接下来 配置 mod_ssl 时需要的是 私钥文件 和 证书 文件。

    private.key文件内容 full_chain.pem文件

    配置 Apache httpd 中的 mod_ssl 模块

    可以在 httpd 配置文件中配置多个 VirtualHost 块,并在 VirtualHost 配置块中开启 SSLEngine ,来同时为多个拥有不同 ssl 证书的域名提供 https 服务。

    mod_ssl 模块的可配置项很多,此篇仅对能够基本实现 https 服务的配置项做简单说明。

    注:以下所有配置内容均需要包含在 VirtualHost 配置块中

    首先需要打开 SSLEngine ,配置代码如下:

    #   SSL Engine Switch:
    #   Enable/Disable SSL for this virtual host.
    SSLEngine on
    

    设置 SSLEngine 所使用的协议,配置代码如下:

    #   SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect.  Disable SSLv2 access by default:
    SSLProtocol all -SSLv2
    

    基实以下两项配置在安装好 mod_ssl 后默认已经配置完成,不需要做更改。
    最重要的配置是下面的 服务器证书 和 服务器私钥两项。

    服务器证书配置如下:

    #   Server Certificate:
    SSLCertificateFile /etc/pki/tls/certs/mycrt.crt
    

    服务器证书链配置如下:

    #   Server CertificateChain:
    SSLCertificateChainFile /etc/pki/tls/certs/mycrt.pm
    

    这个文件(/etc/pki/tls/certs/mycrt.crt)就是上一步中申请得到的证书文件。

    服务器私钥配置如下:

    #   Server Private Key:
    SSLCertificateKeyFile /etc/pki/tls/private/myprivatekey.key
    

    这个文件(/etc/pki/tls/private/myprivatekey.key)就是上一步中申请得到的私钥文件。

    其他配置都保持默认就ok了。

    示例

    ## 配置一个 VirtualHost 块,处理 443 端口请求
    <VirtualHost *:443>
      
      ## 配置 DocumentRoot  和 ServerName 
      DocumentRoot /vuser/ssltest1.example.cn/htdocs
      ServerName ssltest1.example.cn
    
      ## 配置日志
      ErrorLog logs/ssltest1.example.cn-ssl_error_log
      TransferLog logs/ssltest1.example.cn-ssl_access_log
      LogLevel warn
    
      ## 开启 SSLEngine 
      SSLEngine on
    
      ## 配置 SSLProtocol 
      SSLProtocol all -SSLv2
    
      SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
    
      ## 配置 SSL 证书文件
      SSLCertificateFile /etc/pki/tls/certs/ssltest1.example.cn.crt
    
      ## 配置 SSL 证书链文件
     SSLCertificateChainFile /etc/pki/tls/private/ssltest1.example.cn.chain.crt
    
      ## 配置 SSL 私钥文件
      SSLCertificateKeyFile /etc/pki/tls/private/ssltest1.example.cn.key
    
      ## 为提供 cgi 等动态网页技术 的文件配置 SSLOptions
      <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
      </Files>
    
      ## 为提供 cgi 等动态网页技术 的目录配置 SSLOptions
      <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
      </Directory>
    
      ## 为IE浏览器做些特殊设置,其实我也不知道这是干嘛用的
      SetEnvIf User-Agent ".*MSIE.*" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    
      ## 配置日志格式
      CustomLog logs/ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    
    </VirtualHost>                
    

    相关文章

      网友评论

          本文标题:使用 Apache httpd 部署 https 服务

          本文链接:https://www.haomeiwen.com/subject/pfqbsftx.html