SSL证书部署

SSL证书部署

就在昨天,域名审核终于通过了,然后我就迫不及待地更新了博客的域名。更新域名的时候倒是没有遇到什么麻烦,在wordpress后台设置一下就行了,同时推荐一款插件:Velvet Blues Update URLs,一键更换域名的设定还是很方便的。

域名更新完了,有强迫症的我看不惯浏览器顶上的那个不安全的提示,于是决定给网站安装SSL证书。不过,在安装证书之前,当然是得先有一个证书。

我是直接在阿里云的证书服务里直接免费注册了一个证书,注册过程还是非常方便的。另外还有另一款免费证书:Let’s Encrypt。至于证书的注册因为操作比较简单所以我也不再细说了。

注册完证书之后就到了喜闻乐见的安装环节了,我之前没弄过这方面的东西,所以只能上网去搜教程。然后搜了一下有一大堆,大部分的内容都差不多,比如这样的:(来自阿里云)

在证书控制台下载Apache版本证书,下载到本地的是一个压缩文件,解压后里面包含_public.crt文件是证书文件,_chain.crt是证书链(中间证书)文件,.key文件是证书的私钥文件(申请证书时如果没有选择系统创建CSR,则没有该文件)。
友情提示: .crt扩展名的证书文件采用Base64-encoded的PEM格式文本文件,可根据需要,修改成.pem等扩展名。
以Apache标准配置为例,假如证书文件名是a_public.crt,证书链文件是a_chain.crt,私钥文件是a.key。

操作步骤

在Apache的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为a.key;
打开 apache 安装目录下 conf 目录中的 httpd.conf 文件,找到以下内容并去掉“#”。
#LoadModule ssl_module modules/mod_ssl.so (如果找不到请确认是否编译过 openssl 插件)
#Include conf/extra/httpd-ssl.conf(删除行首的配置语句注释符号“#”,保存后退出)
打开 apache 安装目录下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,与操作系统及安装方式有关), 在配置文件中查找以下配置语句:
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile cert/a_public.crt
# 证书私钥配置
SSLCertificateKeyFile cert/a.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile cert/a_chain.crt
重启 Apache。
进入Apache 安装目录下的bin 目录,运行以下命令:
/apachectl -k stop./apachectl -k start

但是!
我的服务器上这些并没有卵用!!!

遇到的第一个问题就让我极度绝望,我使用WinSCP上传证书时发现证书根本上转不了!也不知道是什么问题,每次一上传文件之后就提示服务器断开了连接,搜了一下有和我一样问题的但也并没有解决。后来在我不断的尝试下,我发现1kb以下的文件是可以正常上传的,后来我找到了能够正常上传文件的方法:限速1kb慢慢传!(不知道有没有大佬能解决这个问题),还好要传的文件都不大,否则我可能要摔电脑了……(摔不起摔不起)

之后当我成功完成了上传并改完配置文件之后(已经浪费了两个小时),发现了第二个问题,这种配置方法对我的网站完全不起作用!这就很难受了,装完之后甚至网站完全无法访问了,无奈之下只好选择回滚磁盘(偷懒),然后开始了第二轮搜索……

之后又捣鼓了一个多小时,终于找到了另一种方法:

将证书上传到服务器证书目录:/data/cert(没有cert目录可以自己新建)
在/etc/httpd/conf.d目录下新建一个https配置文件,假设命名为mydomain-ssl.conf。
拷贝下面的https配置文件模板到mydomain-ssl.conf文件中,并保存

<VirtualHost *:443>
ServerName  www.mydomain.com
DocumentRoot "/data/wwwroot/default"
#ErrorLog "logs/www.mydomain.com-error_log"
#CustomLog "logs/www.mydomain.com-access_log" 
common
<Directory "/data/wwwroot/default">
Options Indexes FollowSymlinksAllowOverride AllRequire all granted</Directory>
SSLEngine on
SSLCertificateFile  /data/cert/server.crtSSLCertificateKeyFile /data/cert/server.keySSLCertificateChainFile  /data/cert/server-ca.crt
</VirtualHost>


修改配置文件中相关项,并保存 ServerName #主域名,务必修改 ServerAlias #副域名,可选项 DocumentRoot #网站路径,务必填写网站实际路径,例如:/data/wwwroot/default/wordpress Directory #同上 SSLCertificateFile #证书,务必填写网站实际路径 SSLCertificateKeyFile #证书私钥,务必填写网站实际路径 SSLCertificateChainFile #证书链(CA文件),务必填写网站实际路径 注意:证书的后缀一般是:.crt或者 .pem,私钥的后缀是:.key
重启服务#~ systemctl restart httpd

用了这种方法之后,我的ssl终于启动成功了(已省略两个小时的调试时间),看着网站旁边的小锁心情是真的愉悦!

大概概括一下,使用Apache服务器一般来说都可以在httpd文件夹里找到配置文件,ssl配置文件一般有两种,一种是内置在httpd.conf里。另一种则需要自己新建一个配置文件,然后具体的配置过程复制粘贴再修改就解决了,总的来说只要找到正确的方法就没有什么难度了。

另外我在装证书的时候遇到一个问题,我用secureCRT传输文件的时候上传速度只能限制在1kb/s,否则就会报连接出错的问题,我在网上搜了下也只能搜到一两个相同问题但并没有解决方案。不知道有没有大佬能帮我解决一下,谢谢!

最后,总结出了一个道理:

菜是原罪

发布者 | 2019-09-24T21:59:02+08:00 12月 1st, 2018|随笔/日常|0条评论

关于作者

blank
坚强大概——并不是指的的结果,而是迈向某个目标的过程吧。

发表评论

召唤伊斯特瓦尔