如何给自己的网站添加 https ssl 证书

一、简介

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

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

本次配置的:

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

二、申请 ssl 证书

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

file

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

file

三、下载 ssl 证书

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

file

四、配置 nginx

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

使用 docker 命令查看

docker ps | grep nginx

file

接下来就可以配置 nginx 了:

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

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

file

file

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

  1. 修改 nginx 的配置

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

例子如下:

    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)

file

六、常见问题解决

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

这种情况的排查思路:

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

    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端口

Uploading file...

(二) 证书配置成功,但是访问 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

### HTTPS SSL证书的作用 HTTPS协议通过SSL/TLS加密来保障Web通信的安全性。具体来说,SSL证书能够确保客户端(通常是浏览器)与服务器之间的数据传输得到加密保护,防止中间人攻击和其他形式的数据窃取或篡改行为[^1]。 ### Nginx配置SSL证书的方法 #### 准备工作 为了使Nginx支持HTTPS服务,首先需要准备有效的SSL证书以及对应的私钥文件。可以通过多种途径获得这些文件: - **自签名证书**:适合测试环境; - **CA认证的商业证书**:适用于生产环境中对外提供服务的情况; 对于正式上线的应用程序而言,建议从受信任的第三方证书授权机构(CA)处购买并安装经过验证的SSL证书[^4]。 #### 修改Nginx配置文件 完成上述准备工作之后,在Nginx中启用HTTPS的关键在于编辑站点对应的虚拟主机配置文件(`server`块),添加如下所示的相关指令以加载SSL证书及其私钥,并指定监听443端口用于处理HTTPS请求: ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example_com.crt; # 替换成实际路径下的crt文件位置 ssl_certificate_key /etc/nginx/ssl/example_com.key; # 替换成实际路径下的key文件位置 ... } ``` 此外,还可以设置一些额外参数优化安全性,比如开启HSTS头信息、选择合适的密码套件等[^3]。 #### 强制重定向至HTTPS 为了让所有的HTTP流量都自动跳转到更安全的HTTPS连接上,可以在同一个配置文件里增加一条针对80端口的服务定义,专门用来执行永久性的301重定向操作: ```nginx server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } ``` 这样当用户尝试访问http://example.com时就会被无缝地引导至https://example.com版本的网页上了[^2]。 最后记得保存更改后的配置文件并通过命令行工具重启Nginx服务让新的设定生效。如果是在容器化环境下运行的话,则可能需要用特定的方式去触发重新加载过程,例如利用Docker Compose中的相应选项或者直接调用docker exec命令向正在运行中的实例发送信号通知其刷新配置。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五岁小孩吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值