如何给自己的网站添加 https

文章目录

  • 一、简介
  • [二、申请 ssl 证书](#二、申请 ssl 证书)
  • [三、下载 ssl 证书](#三、下载 ssl 证书)
  • [四、配置 nginx](#四、配置 nginx)
  • [五、开放 443 端口](#五、开放 443 端口)
  • 六、常见问题解决
    • [(一)、配置后,访问 https 无法连接成功](#(一)、配置后,访问 https 无法连接成功)
    • [(二) 证书配置成功,但是访问 https 还是报不安全](#(二) 证书配置成功,但是访问 https 还是报不安全)
  • 总结
  • 参考资料

一、简介

相信大家都知道 https 是更加安全的,特别是一些网站,有 https 的网站更能够让用户信任访问

接下来以我的个人网站 五岁小孩 (jxy.xj.cn) 为例子,带大家一起从 0 到 1 配置网站 https

本次配置的:

  • 证书是 腾讯云免费证书、
  • 服务器也是腾讯云的、
  • 使用 docker 部署的 nginx

二、申请 ssl 证书

推荐使用云服务的免费 ssl 证书,一般都会有免费额度,本次使用的是腾讯云的 ssl 证书:我的证书 - SSL 证书 - 控制台 (tencent.com)

提交申请后到 【我的证书】列表,等待审核通过,一般几分钟就审核通过了

三、下载 ssl 证书

等待证书审核通过之后,就可以下载 ssl 证书到本地

四、配置 nginx

如果你的 nginx 和我一样是通过 docker 部署的,那么在配置之前要先确认下容器有没有映射 443 端口,如果不是 docker 部署,则可以忽略这一步

使用 docker 命令查看

shell 复制代码
docker ps | grep nginx

接下来就可以配置 nginx 了:

  1. 首先将刚才下载的 ssl 压缩包上传到服务器,解压到 nginx的配置目录

    一般是上传在 nginx.conf 的同级目录下的 cert 目录,如下图

注意:证书一定要放在 nginx.conf 的同级目录下,以免重启配置出现问题

  1. 修改 nginx 的配置

修改配置文件,添加 443 代理

例子如下:

nginx 复制代码
    server {

        listen 443 ssl;              # 开启 443 代理监听
        server_name blog.jxy.xj.cn;  # 证书绑定的域名
        ssl_certificate cert/blog.jxy.xj.cn_bundle.pem;  # 证书 pem 位置
        ssl_certificate_key cert/blog.jxy.xj.cn.key;     # 证书 key 位置

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        # 代理映射的服务,我这里是代理了 443 到 本地的 30891,按自己的配置 
        location / {
            proxy_pass http://127.0.0.1:30891;
            proxy_set_header Host $host;
         }
        }
  1. 重启 nginx

重启前推荐 执行nginx -t命令检查配置文件是否有语法错误。如果没有错误,执行nginx -s reload命令使配置生效。

我这里是使用 docker 部署,所以我直接使用 docker restart nginx 重启

如果启动后有问题无法正常访问,可以查看 nginx 的错误日志,一般是位于 /var/log/nginx/error.log 查看具体原因

五、开放 443 端口

先看自己的防火墙状态,如果是激活状态,那就需要开放 443 端口

这一步请自行百度

基本上到这里之后,直接访问就可以了:五岁小孩 (jxy.xj.cn)

六、常见问题解决

(一)、配置后,访问 https 无法连接成功

这种情况的排查思路:

  • 确认下自己的 nginx 的状态是否正常启动,如果是 docker,则使用 docker ps| grep nginx , 一般可能是因为配置写错了,如证书的路径配错了,导致 nginx 无法正常启动,那么在查看 error.log 时就会出现错误:

    shell 复制代码
    cannot load certificate "/etc/nginx/cert/jxxxx": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/cert/jxxxx','r') error:2006D080:BIO routines:BIO_new_file:no such file)

    此时就需要先确认配置是否正确,可以使用 nginx -t 检查

  • 还有一种可能是,docker 部署,但是没有映射 443端口

(二) 证书配置成功,但是访问 https 还是报不安全

这种一般只有两种情况:

  1. 证书和域名没对上,比如证书绑定的A域名,但是你在 nginx 配置的是 B 域名

  2. 证书过期

可以使用curl -vvv https://域名访问返回的证书是过期,是否配置错误

如果出现:Unable to communicate securely with peer: requested domain name does not match the server's certificate

那就说明你的证书和域名没对上

总结

配置 ssl 证书还是很简单的:

申请证书 -> 下载证书 -> 配置nginx -> 重启 ngix

参考资料

如何给自己的网站添加 https

相关推荐
寻星探路4 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
王达舒19944 小时前
HTTP vs HTTPS: 终极解析,保护你的数据究竟有多重要?
网络协议·http·https
朱皮皮呀4 小时前
HTTPS的工作过程
网络协议·http·https
Binary-Jeff4 小时前
一文读懂 HTTPS 协议及其工作流程
网络协议·web安全·http·https
JoySSLLian2 天前
手把手教你安装免费SSL证书(附宝塔/Nginx/Apache配置教程)
网络·人工智能·网络协议·tcp/ip·nginx·apache·ssl
win x2 天前
深入理解HTTPS协议加密流程
网络协议·http·https
仙俊红2 天前
从 Filter / Interceptor 到 HTTPS
网络协议·http·https
游戏开发爱好者82 天前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
全栈工程师修炼指南2 天前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
2501_915106322 天前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview