开启HTTPS-02:SSL证书申请、有效性确认和上传

SSL其实是一种安全协议,即通过身份认证和对浏览器和服务器之间传输的数据进行加密,确保双方的数据安全。
SSL证书按照安全性和公信力,分为DV SSL、OV SSL、EV SSL三个级别,个人网站一般都使用DV SSL,尽管认证没有那么严格加密等级也并非最高,但个人使用是足够的,且价格比较舒适(甚至可以是免费的)。
去哪里申请SSL证书
免费的DV SSL其实有很多获取方式,如Startssl 、Let’s Encrypt、Symantec、TrustAsia(Symantec签发)、沃通等。但如果要手工安装(可以尽量避免自动安装为我们的服务器增加负担),并且公信力较好(沃通的SSL证书已经被Mozilla拉黑),还是建议选择Symantec的单域名证书。
目前阿里云、腾讯云等提供的免费证书都由Symantec签发。有些人百度后表示Google Chrome浏览器新版本不支持Symantec证书,其实这是误解,Symantec旗下品牌的根证书已经更新为DigiCert,升级后的证书暂无与Chrome的兼容问题。
Symantec证书申请、匹配简介
我们以阿里云购买证书为例,直接搜索SSL证书即可找到购买页面。依次选择第一排中的Symantec,第三排中的1个域名,第二排中的免费型DV SSL,即可选中我们希望购买的证书。

如果你希望同时开启两个域名或额外的子域名,比如同时开启www.kamilet.cn和qnssl.kamilet.cn(本站为图床准备的https入口地址),可以直接购买多份。一个账号可以同时拥有20个免费证书,绝大多数情况下都是够用的。

购买完成后,即可在控制台的“SSL证书(应用安全)”这一栏下找到我们买好的证书。点击申请即可弹出下面的页面,填写相关信息即可。
- 注意“证书绑定的域名”这一栏,要填写完整的域名而不能是通配符域名。如可以是www.kamilet.cn或qnssl.kamilet.cn这样的域名。其中,www.kamilet.cn是自动兼容kamilet.cn的。
- 注意“域名验证方式”这一栏,如果你的域名DNS是托管给阿里云的,那么可以选择自动DNS验证,完成后手动删掉那一行txt解析即可。如果并非是在阿里云,可以选择后两个,操作起来都不会很麻烦。
- 注意“CSR生成方式”这一栏。Symantec是可以使用你生成的CSR(公钥)来制作配套证书私钥的,如果你此前使用Apache等生成过证书或手里已CSR,可以选择上传。当然在大多情况下这是没有必要的,除非你的服务商要求你使用指定公钥。
审核一般一天内就能完成,之后我们在控制台SSL证书页面下载证书文件即可。这里我们使用教程环境,所以下载Apache版本。
SSL证书有效性确认,避免证书不匹配导致的Apache无法启动和key values mismatch报错
买来的SSL证书就必定是有效的吗?一般来说是的,但本站长就被坑过:本来希望在今年9月开启SSL,但当时比较忙,因此只申请了证书,而在近期配置的时候,Apache始终不能启动,而log显示key values mismatch。
你可以在下面的网站验证一下你的SSL证书:SSL验证工具。站长刚才提过的9月份的证书,在这个工具下即显示mismatch(公钥和私钥不匹配)。如果后期排查实在不能发现问题,请记得怀疑一下你的证书……
SSL证书上传和权限分配问题(为何分配为644)
确认没有问题后,将你的SSL证书上传到服务器即可。上传的方法有很多,比如:
- 使用FTP工具,上传到指定路径。
- 复制证书内容,在Shell里新建文件黏贴进去。
- 在Shell里远程进行wget,解包。
证书存放的目录没有严格限制。但就CentOS来说,不建议放在var目录下,因为不小心设置可能就导致了这个文件可以外网访问。系统默认的SSL证书路径是:/etc/pki/tls/,并且将证书文件放在不同的文件夹。但其实没有必要,举例来说,我们可以将证书放在/etc/httpd/cert/文件夹下,三个文件都放在这里即可。
为了方便起见,我们将三个文件命名为:abc_public.crt、abc_chain.crt和abc.key。其中public和chain在证书原名中会有,请注意不要混淆。此时,这三个文件的路径分别是:
- /etc/httpd/cert/abc_public.crt
- /etc/httpd/cert/abc_chain.crt
- /etc/httpd/cert/abc.key
如果你的etc目录下没有httpd文件夹,一般是由于Apache的安装方式不同,请参考教程第三部分来查找Apache的相关目录。
接下来,我们为这三个文件配置权限。在实际使用的时候,Apache必须对三个文件拥有读取权限,只要保证这一点即可。一般来说,建议分配给root用户的默认权限,即644权限,让其他程序有权限读取即可。通过:
# ls –l /etc/httpd/cert/abc.key
可以查看当前的权限。如果不是root用户的rw-r–r–权限,可以使用下面的命令修改:
# chown –R root /etc/httpd/cert/*
# chmod –R 644 /etc/httpd/cert/*
返回上一步: 事前准备:环境检查和明确需求,考虑可行性,系统备份