阿里云申请免费DV证书,将博客网站http访问转成加密的https方式访问的超详细教程
1 申请阿里云免费DV证书步骤和流程:
1.1 在每个自然年内,都可以使用已完成实名认证的阿里云账号,通过SSL证书服务一次性申领20张免费证书。具体操作步骤如下:
登录你的阿里云账号,并访问云盾证书服务购买页,按下图所示选择后单击立即购买
1.2 按照页面提示完成支付。成功领取DV单域名证书【免费试用】(20张)后,您可以在SSL证书控制台的SSL证书页面,通过免费证书页签,查看当前可申请的免费证书个数。单击创建证书
1.3 在新生成的免费证书实例的操作列,单击证书申请。如果是单域名的话,在右侧证书申请面板,配置以下申请信息,填写例如example.com、
test.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.