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: <date/time>
-
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: <platform name> //平台名字
-
确保已经获取数字证书。有关获取数字证书方法,可参阅如何获取数字证书。
如何部署
开启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 /<path>/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进行配置
<VirtualHost _default_:443> 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 #证书链路径 </VirtualHost>
强制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的使用。