0%

申请及部署SSL证书

前言

​到目前为止,我们的博客使用的是‘http’方式访问,这种方式被认为是不安全的,现在都鼓励使用‘https’方式访问网站,那么要如何使用https方式访问网站呢,今天我们就来解决这个问题。

申请免费SSL证书

​我们在腾讯云购买了云服务器、域名、DNS解析,所以我们在腾讯云申请免费的ssl证书;登录腾讯云,进入‘SSL 证书’-‘我的证书’页面,点击‘申请免费证书’;在‘证书绑定域名’中输入要使用https方式访问的域名(这个域名要先在‘我的域名’中添加),在‘域名验证方式’中选择自动DNS验证,点击‘提交申请’;需要等腾讯云平台签发SSL证书;等证书签发后回到‘SSL证书’-‘我的证书’页面,下载对应的证书(我下载的是nginx版的)

部署SSL证书

​ 现在我们已经下载了ssl证书到本地,但是要让它生效,我们需要手动将它部署到域名对应的服务器的nginx中(我的是腾讯云服务器)

 1. https方式监听的是443端口,我们需要打开这个端口(linux内部的防火墙和腾讯云的防火墙);
 2. 我的nginx是部署在docker中,所以需要修改docker-compose.yml文件,映射docker容器的443端口到宿主机,同时挂载一个文件夹,用来存放ssl证书,修改后的docker-compose.yml文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
services:
nginx:
image: nginx:1.22
container_name: nginx
restart: always
volumes:
- ./conf/nginx.conf:/etc/nginx/nginx.conf #映射配置文件入口文件
- ./html:/usr/share/nginx/html #静态资源根目录挂载
- ./logs:/var/log/nginx #日志文件挂载
- ./conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf #挂载配置文件
- ./ssl_certificate:/etc/nginx/ssl_certificate #挂载ssl证书
ports:
- 80:80
- 443:443 # 映射443端口

  1. 将证书文件解压后上传到以docker-compose.yml文件所在文件夹为根目录的“ssl_certificate”文件夹中
  2. 修改nginx的default.conf配置文件,添加对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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
server {
# SSL 默认访问端口号为 443
listen 443 ssl;
# 绑定证书的域名
server_name qiuli.site www.qiuli.site;
# 证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/ssl_certificate/qiuli.site_bundle.pem;
# 私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/nginx/ssl_certificate/qiuli.site.key;
# 过期时间
ssl_session_timeout 5m;
# 协议版本
ssl_protocols TLSv1.2 TLSv1.3;
# 加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
# 服务器优先选择加密套件
ssl_prefer_server_ciphers on;
# 代理路径
location / {
proxy_pass http://10.6.0.3:4000/;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

server {
# SSL 默认访问端口号为 443
listen 443 ssl;
# 绑定证书的域名
server_name blog.qiuli.site;
# 证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/ssl_certificate/blog.qiuli.site_bundle.pem;
# 私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/nginx/ssl_certificate/blog.qiuli.site.key;
# 过期时间
ssl_session_timeout 5m;
# 协议版本
ssl_protocols TLSv1.2 TLSv1.3;
# 加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
# 服务器优先选择加密套件
ssl_prefer_server_ciphers on;
# 代理路径
location / {
proxy_pass http://10.6.0.3:4000/;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

server {
listen 80;
#绑定证书的域名
server_name qiuli.site www.qiuli.site blog.qiuli.site;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
  1. 验证配置并让其生效

    使用命令进入nginx的docker容器

1
docker exec -it nginx /bin/bash

​ 验证配置是否有效

1
nginx -t

​ 更新配置令其生效

1
nginx -s reload

​ 如果有必要则重启nginx,这里不再赘述