使用 Apache httpd 部署 https 服务

2018-06-06  本文已影响172人  JSON_NULL

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

注意:此篇是在 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>                
上一篇下一篇

猜你喜欢

热点阅读