Apache是一款时下最主流、被广泛使用的web服务器。本文详细描述如何在Apache httpd服务器上部署并使用SSL(Secure Sockets Layer)证书。
前提条件
Apache 2.2.34及以上版本
注意:通过运行 httpd -v 命令行查看Apache服务器版本号。
$ httpd -v
# 输出结果:
# Server version: Apache/2.4.28 (Unix)
# Server built:
SSL加解密软件:Apache服务器自身没有Public Key Infrastructure(PKI)相关库,而是采用第三方API进行,如:OpenSSL 1.1.0f及以上版本。
注意:通过运行openssl version -a命令行查看系统中OpenSSL版本号。其中,build on参数日期须晚于2017年5月。
$ openssl version -a
# 输出结果:
# LibreSSL 2.2.7 //版本号
# built on: date not available //build on 参数
# platform: //平台名字
确保已经获取数字证书。有关获取数字证书方法,可参阅如何获取数字证书。
如何部署
开启SSL功能
获取到上述三个文件后,按照如下步骤加载SSL配置:
加载SSL模块
默认情况下,Apache服务器无法进行SSL相关的加解密操作,需要在服务器中运行下列命令行加载SSL模块:
[root@test conf.d]# yum install mod_ssl
注意:加载前,可运行ls –ll命令行确认Apache服务器的modules目录下是否存在mod_ssl.so文件(即SSL模块):
[root@test conf.d]# ls -l /etc/httpd/modules/ |grep "mod_ssl.so"
-rwxr-xr-x. 1 root root 219472 10月 20 04:40 mod_ssl.so
确认SSL加解密库文件
确认存在mod_ssl.so文件后,运行ldd //httpd命令行查看是否存在SSL加解密的库文件:
[root@test conf.d]# ldd /usr/sbin/httpd
linux-vdso.so.1 => (0x00007fffac528000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f86f5e5b000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f86f5c34000)
libaprutil-1.so.0 => /lib64/libaprutil-1.so.0 (0x00007f86f5a0a000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f86f57d3000) #####
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f86f55a9000)
libdb-5.3.so => /lib64/libdb-5.3.so (0x00007f86f51ea000)
加载SSL配置
在主配置文件中通过includeOptionalconf.d/*.conf配置,来加载SSL相关的配置文件。
注意:根据版本的不同,名称或路径会各有差异。例如:
配置文件可能叫httpd-ssl.conf、ssl.conf等
有些版本在extra目录下,加载的关键词为include。
SSL相关配置
SSL配置加载完毕后,按照如下步骤对SSL进行相关配置:
打开配置文件,例如:ssl.conf
开启443端口的监听:Listen 443 https
对要使用证书的Virtualhost进行配置
DocumentRoot "/myproject" #网站项目目录
SSLEngine on
SSLProtocol all -SSLv2 –SSLv3 #开启所有协议去掉sslv2、sslv3
SSLHonorCipherOrder On #启用前项保密
SSLCipherSuite
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 #加密套件
SSLCertificateFile /xx/xx/domain.cer #证书公钥路径
SSLCertificateKeyFile /xx/xx/domain.key #证书私钥路径
SSLCertificateChainFile /xx/xx/domain_ca.crt #证书链路径
强制HTTP跳转HTTPS (可选)
通过以下设置,将用户默认的HTTP请求自动跳转为HTTPS请求:
加载重写模块LoadModule rewrite_module modules/mod_rewrite.so
到80端口(http)的Virtualhost中配置重写语句RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
注意:上述步骤需重启后生效。
更多信息
你已成功完成SSL证书部署。如果要对所部署的网站进行安全监测,参阅MySSL的使用。