为博客设置https协议

博客优化内容

http协议的网站总是显示不安全,为了开启小绿锁,在这里准备部署https协议。我的博客是hexo架构,部署在阿里云上的。

阿里云首页中选择 产品 -> 安全 -> 数字证书管理服务(原SSL证书) -> 选购SSL证书

选择免费证书

image-20230406194506999

点击立即购买

image-20230406194606585

个人可以获得20个免费的证书

然后创建一个证书,点击证书申请,填写你的域名,姓名信息后向CA提交申请。待申请成功后,下载证书,然后按照根据你部署方式的不同查阅帮助,在服务器端进行部署

image-20230406195102462

我用的是nginx所以这里以nginx为例,nginx的部署分为虚拟主机和独立主机的区别,首先在服务器端判断你的机器属于哪一类,我的服务器是ECS服务器,属于独立主机,刚刚申请到的SSL证书即是阿里云的云盾证书。

将下载的压缩包中的两个文件上传到服务器,上传的目录为 /etc/nginx/cert/

运行 nginx -t 命令查看你的nginx配置文件路径。打开配置文件

nginx -t
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful

vim /etc/nginx/nginx.conf

http{} 内添加以下配置,这里添加的是443端口的配置

#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    listen 443 ssl;

    #填写证书绑定的域名
    server_name <yourdomain>;
    root html;
    index index.html index.htm;

    #填写证书文件名称
    ssl_certificate cert/<cert-file-name>.pem;
    #填写证书私钥文件名称  
    ssl_certificate_key cert/<cert-file-name>.key;

    ssl_session_timeout 5m;
    #表示使用的加密套件的类型
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    ssl_prefer_server_ciphers on;
    location / {
        #Web网站程序存放目录
        root html;
        index index.html index.htm;
    }
}

若你想将所有http访问自动跳转到https,可以将下面的代码添加到servers{}代码段 后面,当然如果你已经配置了80端口,可以将配置的一部分放到80端口的servers中

server {
    listen 80;
    #填写证书绑定的域名
    server_name <yourdomain>;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    location / {
        index index.html index.htm;
    }
}

重启nginx服务

nginx -s reload

参考链接

[1] Hexo 网站配置免费阿里云证书

[2] 证书部署