如何给自己的网站添加 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

相关推荐
网络安全-老纪12 小时前
iOS应用网络安全之HTTPS
web安全·ios·https
lxkj_20241 天前
修改ffmpeg实现https-flv内容加密
网络协议·https·ffmpeg
千羽星弦1 天前
Apache和HTTPS证书的生成与安装
网络协议·https·apache
可涵不会debug2 天前
【Linux|计算机网络】HTTPS工作原理与安全机制详解
linux·网络协议·http·网络安全·https
hotlinhao2 天前
阿里云IIS虚拟主机部署ssl证书
阿里云·云计算·ssl
lu云之东2 天前
Harbor2.11.1生成自签证和配置HTTPS访问
网络协议·http·docker·https·harbor
helloWorldZMY2 天前
超文本传输协议(HTTP)与超文本传输安全协议(HTTPS)
网络协议·计算机网络·http·https
白竹2 天前
【pip install报SSL类错误】
python·ssl·pip
鸠摩智首席音效师2 天前
如何在 Elasticsearch 中配置 SSL / TLS ?
elasticsearch·ssl
დ旧言~3 天前
【网络】数据链路层协议——以太网,ARP协议
开发语言·网络·网络协议·http·https·php