# Nginx配置HTTPS/安装SSL证书

本篇博文记录一下给博客域名即本站配置HTTPS/SSL证书的过程

# 一、HTTP与HTTPS

# HTTP

HTTP协议(即HyperText Transfer Protocol,超文本传输协议)基于TCP/IP通信协议来进行通信,它的缺点是所有信息明文传播,这带来了风险,第三方攻击者可以依此窃取信息、篡改信息、伪造身份参与通信

# HTTPS

既然信息不安全,是明文传递的,那就加密传递,通信双方的信息不仅加密,还要校验通信双方的身份。这就是SSL/TLS协议,和基于该协议的HTTPS。

# SSL/TLS运行过程

访问网站时浏览器会向服务器获取公钥,使用公钥加密通信内容,服务器接收到加密后的内容后使用私钥进行解密。

P.S.

  • 👉 SSL/TLS协议运行机制参考文末链接[1]

  • 👇 未设置证书时为HTTP协议,浏览器会提示此为不安全连接。。

nginx-config-https-02

# 二、申请SSL/TLS证书

企鹅云上搜索SSL证书然后走申请流程,大概半天就会下来。😁

nginx-config-https-01

上图中点击下载,包里有下图所示的文件👇 。

我是用Nginx做的代理,Nginx包里有两个文件,.crt网站域名的签名证书,即公钥.key则为私钥

nginx-config-https-03 nginx-config-https-04

# 三、配置Nginx

# 查看Nginx配置

在Nginx中配置HTTPS/SSL需要开启http_ssl_module模块。接下来查看服务器安装的Nginx已安装的模块

nginx -v # 查看版本
nginx -V # 是大写的V
1
2

nginx-config-https-05

已经安装了http_ssl_module模块,如果没有安装,需要重装Nginx。

重装解决方案参考文末链接[2]

# 将公私钥上传到服务器

我通过服务器安装的宝塔面板带的FTP将公私钥上传到服务器,地址是在../nginx/ssl/,在安装的Nginx的根目录下创建了一个ssl目录。

nginx-config-https-06

nginx-config-https-07

# 修改nginx.conf

配置好后需要重启Nginx。

展开查看nginx.conf配置
...
server
    {
      listen 443 ssl;
      server_name tourist17846.cn www.tourist17846.cn;

      #证书
      ssl_certificate /nginx/ssl/www.tourist17846.cn_bundle.crt;
      #私钥
      ssl_certificate_key /nginx/ssl/www.tourist17846.cn.key;
      # TLS协议版本
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      #配置会话超时时间
      ssl_session_timeout  5m;
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
      #优先采取服务器算法
      ssl_prefer_server_ciphers  on;
      #设置长连接
      keepalive_timeout   70;
      #减少点击劫持
      add_header X-Frame-Options DENY;
      #禁止服务器自动解析资源类型
      add_header X-Content-Type-Options nosniff;
      #防XSS攻击
      add_header X-Xss-Protection 1;

      location / {
        root   /my-blog;
        index  index.html index.htm;
      }

      error_page  404              /404.html;

      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
        root   html;
      }
    }

# 服务代理,将访问80端口的http请求转向https
server
    {
      listen 80;
      server_name tourist17846.cn www.tourist17846.cn;
      return 301 https://$host$request_uri;
    }
...
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

# 四、解决问题

以下是爬坑问题记录📝。

# 1.端口不能配80

nginx-config-https-08

上图就是我配80端口给的提示,这里需要配置支持HTTPS协议的端口,默认是443

nginx-config-https-09

# 2.配置好了不能访问

写好了配置文件,也重启了Nginx,Nginx没有报错,浏览器访问不了。。

这个问题困扰了两个晚上,直到第二个晚上才解决。

在浏览器中输入域名,发现已经转到了https://...,但是浏览器却提示无法访问

这说明配置没问题。接下来把排查重点放在了服务器的安全组,查看发现腾讯云的安全组已配置443端口。。

👉 一时间解决不了,直到后来打开宝塔面板,发现上面有一个防火墙。试着把443加入放行端口列表,终于成功了。。🤣

nginx-config-https-10

nginx-config-https-11

# 五、参考资料

Last Updated: 2 years ago