https(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 http 通道,简单讲是 http 的安全版。即 http 下加入 SSL 层,https 的安全基础是 SSL,因此加密的详细内容就需要 SSL。在各个 Linux 发行版中,实现 SSL 的一般则是 openssl 套件。
默认情况下,LAMP 是没有开启 SSL 的,需要手动配置。本篇教程主要是将手动配置的过程总结一下。
下面将从申请 CSR 开始,一步一步部署 SSL。
1、生成证书请求 CSR 文件
这里需要用到 openssl 命令,需要安装 openssl。
CentOS 下:
Debian 或 ubuntu 下:
以 RSA 2048 私钥举例,命令如下:
以 ECC 256 私钥举例,命令如下:
以上命令,在生成 CSR 的时候会有个交互,如下:
注意:
这里的 server.pem 即为私钥,需要好好保存,最好你申请下来的证书在配置时,需要用到这个私钥,一旦私钥丢失,该证书就废了,只能重新申请。
一般情况下,申请 RSA 2048 的证书就足够了。
以上步骤全部做完,则会生成两个文件:
server.pem
server.csr
将其下载回本地,妥善保管。用任意文本编辑器打开 server.csr,用里面的内容去申请证书即可。
当然,最好是将这 2 个文件改名为你自己的域名,以方便辨识,比如:
teddysun_com.pem
teddysun_com.csr
2、申请证书
现在市面上应该已经存在 5 种免费 SSL(DV)的提供商了,分别是:
1)letsencrypt (https://github.com/certbot/certbot)
2)startssl (https://www.startssl.com/)
3)wosign (https://buy.wosign.com/free/)
4)comodo
5)alphassl
前 3 种都比较容易申请,后 2 种则需要通过一些途径才能免费获取的到。
付费的则五花八门了,这里就不再赘述。
申请过程省略。
最后你会得到一个证书文件(一般后缀名为 crt)。
注意:
有的证书(比如 comodo 及 alphassl)还需要合并证书链,将你得到的证书以及根证书合并到同一个文件中才能使用。
每家的证书链都是不一样的,如果你是用 letsencrypt 申请的话,默认已经是有个完整证书链的证书了。
/etc/letsencrypt/live/<domain>/fullchain.pem
Tips:如何合并证书链?
用任意文本编辑器打开你的证书文件(比如名称为:teddysun_com.crt),在文本的最后面添加根证书(teddysun_com.ca-bundle)里的全部内容,保存。
3、部署证书
在安装完 LAMP 环境后,默认是没有加载 SSL 配置的。
1)这里需要修改一下配置文件
/usr/local/apache/conf/httpd.conf
找到下面的一行
#Include conf/extra/httpd-ssl.conf
将前面的 # 注释去掉,保存。
2)将合并后的证书,比如 teddysun_com.crt 和私钥 teddysun_com.pem 复制到路径 /usr/local/apache/conf/ 下。
3)修改配置文件 /usr/local/apache/conf/extra/httpd-ssl.conf ,内容如下:
注意:
该配置文件是基于 Apache 2.4 而来。
VirtualHost 虚拟主机里的配置是可以更改的。
1)如果你想指定固定 IP 到该 VirtualHost,把 <VirtualHost *:443> 改为 <VirtualHost 12.34.56.78:443>,这里的 12.34.56.78 是举例 IP
2)DocumentRoot 是网站根目录,指定为你自己的目录
3)ServerName 是网站主域名,指定为你自己的
4)ServerAlias 是网站的其他域名,可定义多行,也可不定义。不定义的话,就删除该行
5)ErrorLog 是错误日志,指定具体路径
6)TransferLog 是访问日志,指定具体路径
7)SSLEngine 必须是 on
8)SSLProtocol 是指定 SSL 连接方式,不包含 SSLv2 和 SSLv3,这两种已不安全
9)SSLHonorCipherOrder 必须是 on
10)SSLCipherSuite 是加密套件,这里去除了一些不再安全的一些方式
11)SSLCertificateFile 是证书文件,指定具体路径
12)SSLCertificateKeyFile 是证书的私钥文件,指定具体路径
13)CustomLog 是自定义日志的格式
14)BrowserMatch 是浏览器匹配,这里主要是对微软 IE 旧版本 2-5 进行了定义
15)Directory 是和 DocumentRoot 一致的,是对文件夹一些属性的定义
参考链接:
https://httpd.apache.org/docs/current/mod/mod_ssl.html
https://httpd.apache.org/docs/current/mod/mod_setenvif.html
https://httpd.apache.org/docs/current/mod/core.html#directory
4、确认生效
在确认以上步骤全部完成,并且正确的情况下,重启 Apache 后即可生效。
查看 httpd 监听的端口,应该会有 443
域名解析好后,使用 Chrome 浏览器访问,你就会看到你的网址前有个可爱的小绿锁了。
5、测评
下面就可以来测评一下你的 SSL 部署的得分了。
访问以下网址:
https://www.ssllabs.com/ssltest/index.html
输入你的网站域名,跟上面配置里的 ServerName 的值一致。
稍等片刻,就会看到得分了。
按照以上配置,正常状态下,得分应该是 A