准备工作 使用的系统是:CentOS 7.4 64 位 + Apache + httpd
首先假设前期工作已经做好,包括证书的购买、下载、上传到服务器,hppd 的安装,Apache 开启 ssl 等。这些在网上有大量的文章,并且内容相似,没有什么异议,照做就好。
简单的讲,证书在阿里云购买的一年免费版(ssl 证书,单域名,DV 类型。如果买错了付费版的,并且已签发,在短期内可申请吊销并退款),下载的 Apache 版,在服务器 /etc/httpd 下新建文件夹 ssl 并上传下载好的三个证书文件,hppd 使用默认的入口 “/var/www/html”,服务器防火墙已关闭,端口未被占用。
软件使用的是 Termius(SSH) 和 Transmit(文件传输)。其实感觉阿里云自带的远程连接也还不错。
直接到证书安装的过程,这个网上也算大同小异,弄了许久许久,都试过了一遍还是不行,最后才发现是因为没有添加安全组规则,所以大概很多操作有无均可,反正我只是想要那个绿色的小锁头,下面是我的配置。
安装证书 在服务器中有两个关键的配置文件需要修改:
httpd.conf 1 2 3 4 5 6 7 8 9 10 11 12 ServerName www.blove7.cn:80 <VirtualHost *:80 > RewriteEngine on RewriteCond %{SERVER_PORT} !^443 $ RewriteRule ^(.*)$ https: </VirtualHost>
ssl.conf 文件不存在,需要先安装mode_ssl.so模块(启用SSL功能) :yum install -y mod_ssl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <VirtualHost _default_:443 > DocumentRoot "/var/www/html" ServerName www.blove7.cn:443 SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM SSLHonorCipherOrder on SSLCertificateFile /etc/httpd/ssl/blove7_public.crt SSLCertificateKeyFile /etc/httpd/ssl/blove7.key SSLCertificateChainFile /etc/httpd/ssl/blove7_chain.crt </VirtualHost>
重启服务 最后重启服务,就可以用 https 来测试下自己的域名了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 // 重启服务 [root@iz2zefvvd0aq2yy6ufvtlbz ~] # systemctl restart httpd.service // 查看状态,太多的信息也看不懂,我只是注意小圆点为绿色,并且最后两行中间没有夹杂其他内容。 [root@iz2zefvvd0aq2yy6ufvtlbz ~] # systemctl status httpd// 如果小圆点是红色的,就代表出错了 ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2020 -05 -25 23 :50 :54 CST; 17 h ago Docs: man:httpd (8 ) man:apachectl (8 ) Process: 5152 ExecStop=/bin/kill -WINCH ${MAINPID} (code =exited, status=0 /SUCCESS) Main PID: 5157 (httpd) Status: "Total requests: 110; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─5157 /usr/sbin/httpd -DFOREGROUND ├─5159 /usr/sbin/httpd -DFOREGROUND ├─5160 /usr/sbin/httpd -DFOREGROUND ├─5161 /usr/sbin/httpd -DFOREGROUND ├─5164 /usr/sbin/httpd -DFOREGROUND ├─5165 /usr/sbin/httpd -DFOREGROUND ├─5167 /usr/sbin/httpd -DFOREGROUND ├─5168 /usr/sbin/httpd -DFOREGROUND ├─5169 /usr/sbin/httpd -DFOREGROUND ├─6085 /usr/sbin/httpd -DFOREGROUND └─6086 /usr/sbin/httpd -DFOREGROUND // 显示这两行就代表没问题 May 25 23 :50 :54 iz2zefvvd0aq2yy6ufvtlbz systemd[1 ]: Starting The Apache HTTP Server... May 25 23 :50 :54 iz2zefvvd0aq2yy6ufvtlbz systemd[1 ]: Started The Apache HTTP Server.
1 2 3 4 5 6 // 查看防火墙状态 [root@iz2zefvvd0aq2yy6ufvtlbz ~] # systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld (1 )
安全组 就是这个问题困住了我很久,因为绝大部分的文章都没有提到这个问题。
如果不管怎么配置,始终都无法成功的话,可能就是需要开启安全组。
进入阿里云,云服务器 ECS,实例列表,实例最后的操作项,选择更多,网络和安全组,安全组配置,配置规则,如果端口范围没有 443 的那很可能就是这个问题了,手动添加一条端口为 443 的。
其它 Http 默认使用的是 80 端口。Https 默认使用的是 443 端口。Chrome 可以在显示不安全那里单击,查看是否显示有证书项,有证书就是 Https,没有就是 Http,或者查看证书是否有效。我这里在 Chrome 用 Https 访问会显示有三项,证书(是否有效),Cookie,网站设置。
鉴于自己的博客是在 Github 和 Coding 双地部署的,某一天开始无法打开页面,提示无法与服务器建立安全连接,还以为是证书的问题,特意在阿里云买了款付费的证书,但没用到,幸好可以退款。大概是因为 Chrome 更改过某些政策的原因,导致 Coding 的证书失效了,所以暂时把域名导向 Coding 的关掉了,只使用 Github。
为何买的付费证书没有用到,首先 Github 和 Coding 都提供强制 Https 连接,都提供免费的证书并且自己续期,最重要的是都无法上传个人的证书。
如果已经弄好了证书,通过 https 访问成功,但还是显示不安全,原因多半是因为内部访问了不安全的资源,比如 http 的连接,或者图片等。可以通过检查(F12)来查看有哪些不安全资源(右上角黄色三角图标)。
七牛云 为七牛云的图床更新 ssl 证书:
1、阿里云购买 ssl 证书,并到相应域名解析验证。
2、验证成功后,下载相应证书,比如 Apache。
3、进入七牛云
备注 参考资料 :阿里云文档 提示了我配置安全组