10分钟把你的网站从HTTP升级成HTTPS

301 阅读4分钟

这篇文章是在开发中的实际配置过程,写篇文章方便大家学习,自己也加深记忆。废话少说直接开始吧。

获取SSl证书

SSL 证书可以去各大云服务商申请免费的,当然也可以是付费的,这里我们使用腾讯云申请。地址: 腾讯云 SSL证书

腾讯的文档都还蛮全的,按照一步一步走准没错,具体步骤不在赘述啦,具体可以看这里:域名型(DV)免费 SSL 证书申请流程

放开 443端口

去云服务商放开443端口的限制,这个dddd,不会的同学,肯定不会看到这篇文章。

配置Nginx

下载证书

步骤如下:

  • 先去 我的证书

  • 选择需要下载的Nginx证书的 SSL 证书并单击下载。如下图所示:

    image_l9SR_mtp3R.png

  • 在弹出的 “证书下载” 窗口中,单击下载,即可下载根证书。如下图所示: image_YO9RWmOIwL.png

上传证书

这里上传到 /ssl/nginx路径

image_6HmdpPrlo_.png

配置nginx.conf

查看Nginx是否按照SSL模块

Nginx目录/sbin/nginx -V

显示了 configure arguments: --prefix=Nginx目录 --with-http_stub_status_module -- with-http_ssl_module 就算安装了SSL 模块,可以跳过一下步骤。

没有显示的同学请查看这篇文章nginx添加ssl模块。完成后就可以进行后面的步骤啦。

添加如下配置:

server {
        #SSL 默认访问端口号为 443
        listen 443 ssl;
        #请填写绑定证书的域名
        server_name XXX.com;
        #请填写证书文件的相对路径或绝对路径
        ssl_certificate  /ssl/nginx/XXX.crt; 
        #请填写私钥文件的相对路径或绝对路径
        ssl_certificate_key /ssl/nginx/XXX.key; 
        ssl_session_timeout 5m;
        #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        #请按照以下协议配置
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        
        location / {
            #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 
            #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
          root   html;
          index  index.html index.htm;
          try_files $uri $uri/ /index.html;
        }
        location /api/ {
             proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
​
            proxy_pass http://localhost:8080/;        
        } 
    }

修改配置文件后,使用以下命令测试一下,有错误的同学仔细检查一下之前的步骤。

nginx -t

成功后重新加载一下Ningx配置文件:

nginx -s reload

重载成功,即可使用 https://XXX.com 进行访问。

HTTP 自动跳转 HTTPS 的安全配置(可选)

Nginx 支持 rewrite 功能。若您在编译时没有去掉 pcre,您可在 HTTP 的 server 中增加 return 301 https://$host$request_uri;,即可将默认80端口的请求重定向为 HTTPS。修改如下内容:

server {
        #SSL 默认访问端口号为 443
        listen 443 ssl;
        #请填写绑定证书的域名
        server_name XXX.com;
        #请填写证书文件的相对路径或绝对路径
        ssl_certificate  /ssl/nginx/XXX.crt; 
        #请填写私钥文件的相对路径或绝对路径
        ssl_certificate_key /ssl/nginx/XXX.key; 
        ssl_session_timeout 5m;
        #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        #请按照以下协议配置
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        
        location / {
            #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 
            #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
          root   html;
          index  index.html index.htm;
          try_files $uri $uri/ /index.html;
        }
        location /api/ {
             proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
​
            proxy_pass http://localhost:8080/;        
        } 
}
    
server {
    listen 80;
    #请填写绑定证书的域名
    server_name XXX.com;
    #把http的域名请求转成https
    return 301 https://$host$request_uri; 
}

修改配置文件后,使用以下命令测试一下,有错误的同学仔细检查一下之前的步骤。

nginx -t

成功后重新加载一下Ningx配置文件:

nginx -s reload

重载成功,即可使用 http://XXX.com 进行访问。

修改远程资源

Http转Https访问

以上步骤之后,可能会有一些同学,没有正常访问。原因大部分是使用了远程资源,而远程资源不支持Https访问。

查看浏览器日志显示如下异常: image_VUxAvUd_jO.png

这里是有一些远程资源使用的Http协议进行访问,而Https协议不支持直接访问Http协议。

这里建议添加在Html添加如下标签,Http自动使用Https访问。

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

添加成功,即可刷新页面进行访问。还没有成功的同学可能是远程资源不支持Https访问,请看下一步。

七牛云添加Https配置

因为笔者使用的是七牛云的云对象存储服务这里使用七牛云举例,于其他云服务商大差不大。

获取SSL证书

七牛云配置Https 也需要SSL证书,可以采取上面的步骤获取SSL证书。

七牛云目前支持PEM格式(后续支持其他格式可以跳过格式转换步骤),在腾讯云获取的证书需要先转以下格式。地址:myssl.com/cert_conver…

格式转换步骤如下:

  • 先下载 JKS格式,和以上的下载步骤一样,选择Tomcat(JKS格式)就行。

  • 原格式选择 “JKS”,目标格式选择“PEM” image_56qW1yg2nn.png

  • 点击上传文件选择.jks文件,如下图所示: image_o_YcGMAImP.png image_08x2YxdBNL.png

  • 原文件密码在keystorePass.txt文件中粘上来就行。

  • 解压密码是下载的zip包的密码,随意就好。

也可以使用七牛云获取SSL证书。这里就不赘述啦。参考developer.qiniu.com/ssl/3666/ss…(UI可能一些不对,功能大差不大)

配置

这里就使用我们在腾讯云获取的SSL证书

  1. 打开我的证书

  2. 选择需要部署的证书点击部署CDN。如下图所示:

    image_84VMkLhk-D.png

  3. 选择需要的域名点击部署,这里已经部署了就不往下展示了。如下图所示: image_o9c_tjr2nF.png

完成以上配置就完成了啦。

总结

好了整篇文章就结束啦,之后你的网站就可以使用HTTPS进行访问啦。这篇文章是笔者在项目中的整体经历,也算是第一次在掘金提交文章,可以有些说的没那么明白的地方,有什么不懂得的可以在评论区留言或者私信啦,觉得我写的还行的可以给我点个赞或者一键三连,谢谢大家啦。