Heycm

Heycm

给站点上SSL的前洼后坑

2020-07-15

由于简历上写着个人博客地址:https......

然而实际上是:http......

又懒得再去修改打印

所以事情就是这么个事情,这篇文章就这么非常卑微地出现了。。。

一、前情回顾

1、你需要有一台服务器

2、最好正在跑着项目

3、最好有一个域名(没有域名应该也可以申请SSL证书但是我不知道)

二、申请证书

能申请证书的平台有很多,因为我服务器是买的阿里云,所以我就直接上阿里云申请了,感觉应该是比去其他平台申请可以简单一些。证书有免费的,别问,没钱。

1、首先要登录,找到“SSL证书”,进去

1.png

2、然后选购证书。这里只有单域名&DV类型有免费版的,购买支付就行。

2.png

3、进入证书管理控制台,未签发这块有刚刚购买的证书,要申请,填一些信息,审核。

我的审核比较快,免费版的应该都挺快的,点上就完了。

3.png

4.png

4、下一步等待验证就行了,验证通过了就会给你签发这个证书,把它下载下来,选择需要的服务器,我用的是Nginx。

5.png

会得到两个文件:

xxxxxxx_xxx.xxx.xxx.pem(证书)

xxxxxxx_xxx.xxx.xxx.key(秘钥)

嫌弃文件名可以自行修改

三、安装证书

刚才我们下载的是适配Nginx的,我们要把它装到Nginx去。

官方也有教程也很详细:在Nginx或Tengine服务器上安装证书

1、首先,你的服务器开放443端口,其次,服务器上已安装了http_ssl_module模块。

2、在Nginx的安装目录下新建目录 /cert,跟默认配置文件nginx.conf同级,然后把证书和秘钥放到 /cert 目录下。

多说一句,关于这两个东西就这么干,不然配置的时候各种找不到,别问我是怎么知道的,反正我很难受6.jpg

7.png

3、安装SSL之前配置文件

没加SSL之前,conf.d里配置文件只有一个,default.conf,内容是

server {
    listen       80;
    server_name  www.heycm.online;
    
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

4、安装SSL之后配置文件

8.png

修改 conf 目录下 default.conf,内容是

server{
    listen 80;
    server_name www.heycm.online;
    return 301 https://$server_name$request_uri;
}

conf 目录下增加配置文件 ssl.conf,内容是

server {
    listen 443 ssl;
    server_name www.heycm.online;
    root /usr/share/nginx/html;
    index index.html index.htm;
 
    ssl_certificate cert/domain.pem;
    ssl_certificate_key cert/domain.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;

    location / {
      root /usr/share/nginx/html;
      index index.html index.htm;
    }
}

特别说明:ssl_certificate和ssl_certificate_key就是对应证书和秘钥的文件,请使用相对路径!!!用绝对路径找不到!

除了特别说明,还需要把站点目录和域名改成你自己的就行了。

以上设置,将会把所有http请求重定向到https,这样安装工作就完成了,重启Nginx服务器就可以了。

有CDN接着往下看......

还是以阿里云CDN为例。


四、CDN配置证书

进入CDN控制台,安全防护》证书服务》配置证书,可以自己上传,直接选云盾证书就把签发给你的证书拿过来了,选择证书名称,下一步,关联域名就OK

11.png

但是!!!!!!!!

如果只是加上证书,很有可能会出现“重定向次数过多”,F12一看一堆一堆的重定向,根本访问不了。

为什么出现这种情况?怎么解决?

四、CDN回源配置

1、为什么会出现“重定向次数过多”这样的问题

这是因为源站(就是Nginx)配置了将所有http请求(80端口)全部重定向到https(443端口),而CDN配置回源端口是80。

​ 这就意味着,无论http还是https访问CDN加速域名时,CDN都是用http请求源站,此时会触发源站http重定向到https的策略,要求CDN重发一个https请求,然而CDN还是发回去一个http请求,这样它俩就死循环了,所以重定向次数过多。

大概就跟这图差不多...

12.png

2、解决办法,主要就在CDN配置这块了

方法一:将CDN回源端口设置为443

9.png

方法二:开启回源协议,设置为“跟随”

10.png

方法二选一就可以了,可以解决这个问题。

参考文章:https://laoluo.sharexbar.com/post/6722