阿里云申请免费DV证书,将博客网站http访问转成加密的https方式访问的超详细教程

2021-08-17   


阿里云申请免费DV证书,将博客网站http访问转成加密的https方式访问的超详细教程

1 申请阿里云免费DV证书步骤和流程:

1.1 在每个自然年内,都可以使用已完成实名认证的阿里云账号,通过SSL证书服务一次性申领20张免费证书。具体操作步骤如下:

登录你的阿里云账号,并访问云盾证书服务购买页,按下图所示选择后单击立即购买

1.2 按照页面提示完成支付。成功领取DV单域名证书【免费试用】(20张)后,您可以在SSL证书控制台SSL证书页面,通过免费证书页签,查看当前可申请的免费证书个数。单击创建证书

1.3 在新生成的免费证书实例的操作列,单击证书申请。如果是单域名的话,在右侧证书申请面板,配置以下申请信息,填写例如example.comtest.example.com,选择自动DNS验证,单击下一步

1.4 按照验证信息中的提示,完成域名所有权的验证,并单击验证

1.5 单击提交审核,提交证书申请到CA中心进行审核

1.6 DV证书一般会在2个小时内完成审核和签发。你可以在证书列表中查看证书的状态。证书签发后,证书状态将更新为已签发

1.7 签发下来后会有短信通知的,然后点击下发证书右侧下载解压后,将两个文件传到服务器网页目录里就可以开始部署了

2 在服务器上部署https服务:

2.1 我是安装的nginx,不过不管是传统的httpd还是nginx配置上都差不多,nginx主流一点。下面开始改配置文件:

worker_processes  2;                                      #一般与自己服务器cpu核心数一致

events {
    worker_connections  65535;                            #每个进程的最大并发连接数,可自己定义
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    sendfile        on;
    keepalive_timeout  65;
    server_tokens   off;

    gzip  on;                                             #开启压缩上传功能

    client_header_buffer_size  1k;                        #默认请求包头信息的缓存
    large_client_header_buffers  4 4k;                    #大请求包头部信息的缓存个数与容量
    
    upstream halo {                                       #定义后端的服务器组
         server 127.0.0.1:8090;
    }
    
    server {
    listen 80;
    listen [::]:80;
    server_name example.com;                              #example.com换成你自己的域名

    rewrite ^(.*) https://$server_name$1 permanent;       #默认用http访问时会永久地址重定向成https协议
    }
    
    server {
        listen       443 ssl;
        server_name  example.com;                         #将example.com换成你自己的域名
        client_max_body_size 1024m;                       #客户端最大能长传的文件大小

        ssl_certificate      123456_example.com.pem;      #申请的证书文件,如果不是和配置文件在同一路径下,记得写上证书的绝对路径
        ssl_certificate_key  123456_example.com.key;      #申请的证书密码,如果不是和配置文件在同一路径下,记得写上绝对路径

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

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

    location / {
         proxy_pass http://halo;                          #调用后端服务器组
         proxy_set_header HOST $host;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
    }
}

以上是整个nginx配置文件的写法和解读,可以根据自己的需求改

2.2 重启一下服务再默认输入网址就会自己进行https加密访问了。如果改了配置以后出现报错,建议看下字母是否漏写还是花括号写掉了一半导致的

但是本人发现另外一个问题,就是虽然用的https访问,但是还是会显示网站不够安全,通过浏览器开发者模式看到是一些通过http进行访问的代码和图片载入失败。如果之前博客网站的javascipt代码是用的http访问,加密后会造成载入失败,用浏览器的开发者工具会看到的Console是红色的Err和黄色的警告标示,类似下图这样:

这是因为浏览器默认是不允许在HTTPS里面引用HTTP资源的,一般都会弹出提示框。而且如果在一个HTTPS页面里动态的引入HTTP资源,比如引入一个js文件,会被直接block掉的,只留下一句console报告。浏览器为了安全,https下跨协议调用http的是不行的,控制台里会有警告。怎么解决这个问题呢?那就是将我需要的http静态资源也放在https能访问的目录下

昨天弄了一天一直没解决就是因为官方说的halo的网页根目录static在https方式下无法访问的,于是今天终于开窍想到了曲线救国的方式,那我就把我所需要的js文件和图片都放在能访问到的附件目录upload下不就好了嘛~ emmm……通过实践发现这一方式完全可行!现在再进入我的博客网站就是安全加密的,浏览器也有对应的锁标示,害,庆幸终于解决了自己的又一强迫症

Q.E.D.