使用 Apache httpd 部署 https 服务
此篇不是教程,而是笔记。鄙人并未对 此中技术有什么深刻的理解,只是因工作需要部署了两次。因每次部署都需要查阅大量资料很浪费时间,所以把部署的过程记录在此,方便以后再次部署查阅。
注意:此篇是在 CentOS 6.9 环境下做的实践。
使用 Apache httpd 部署 https 服务,大概分为三步:
- 安装 httpd 软件 和 mod_ssl 模块
- 申请 ssl 证书
- 配置 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>