ssl 证书配置

准备工作

使用的系统是:CentOS 7.4 64 位 + Apache + httpd

首先假设前期工作已经做好,包括证书的购买、下载、上传到服务器,hppd 的安装,Apache 开启 ssl 等。这些在网上有大量的文章,并且内容相似,没有什么异议,照做就好。

简单的讲,证书在阿里云购买的一年免费版(ssl 证书,单域名,DV 类型。如果买错了付费版的,并且已签发,在短期内可申请吊销并退款),下载的 Apache 版,在服务器 /etc/httpd 下新建文件夹 ssl 并上传下载好的三个证书文件,hppd 使用默认的入口 “/var/www/html”,服务器防火墙已关闭,端口未被占用。

软件使用的是 Termius(SSH) 和 Transmit(文件传输)。其实感觉阿里云自带的远程连接也还不错。

直接到证书安装的过程,这个网上也算大同小异,弄了许久许久,都试过了一遍还是不行,最后才发现是因为没有添加安全组规则,所以大概很多操作有无均可,反正我只是想要那个绿色的小锁头,下面是我的配置。


安装证书

在服务器中有两个关键的配置文件需要修改:

  • /etc/httpd/conf/httpd.conf

  • /etc/httpd/conf.d/ssl.conf

httpd.conf

1
2
3
4
5
6
7
8
9
10
11
12
// 在 95 行左右,找到 ServerName 修改如下
// 将 # 删掉,后面改成自己的域名
// 改它是为了避免重启 Apache 服务时出错
ServerName www.blove7.cn:80

// 用于重定向,强制 https 访问
// 我的文件中没找到 <VirtualHost *:80>,所以我直接添加了。
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
</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
// 在 56 行左右找到 <VirtualHost _default_:443> 
<VirtualHost _default_:443>

// 修改下面这两处,删除 #。
// "/var/www/html" 是我的默认入口。
DocumentRoot "/var/www/html"
// 修改为自己的域名
ServerName www.blove7.cn:443

//修改下面这些配置,主要每项前面不能有 #。
// on 代表开启 SSl 服务
SSLEngine on

SSLProtocol all -SSLv2 -SSLv3
// 注意有两个 SSLCipherSuite,一个被注释掉了,一个没注释。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on

// 三个证书的配置,简单的识别就是
// 第一个用 _public.crt,第二个用 .key,第三个用 _chain.crt。
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; 17h 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、进入七牛云

  • SSL 证书 -》 上传自有证书。

  • CDN -》域名管理 -》HTTPS 配置(修改配置)


备注

参考资料
阿里云文档
提示了我配置安全组