使用 Let's Encrypt 证书和搭配 Nginx 实现网站 https 化。

一、SSL证书获取

由于 Let's Encrypy 申请的 SSL 证书只有三个月的有效期,为了实现自动续期,使用 acme.sh 脚本来获取且自动续期。

使用过程中如有问题参考 acme官方文档 ,文档有中文说明,下面记录我自己的操作。

1. 下载脚本并安装

下载脚本并安装,将邮箱设置成自己的。

wget -O -  https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online -m  itwxe@qq.com

刷新用户变量,任意目录可以使用 acme.sh。

source /root/.bashrc

这里除了安装了脚本,同时还自动配置了个定时任务,这个定时任务每天会检查你的证书是否需要自动续期,可以使用 crontab -l 查看。

2. 生成证书

为了自动验证并更新证书,使用 DNS 验证需要往文件添加自己的 DNS 授权码,个人认为不太安全,这里使用了 http 方式验证域名所有权,此处结合了 nginx。

nginx 配置你想要申请域名的路径,我这里统一使用 /itwxe/blogSite/public 来验证,如果还有不知道 nginx 怎么安装的可以查看 Linux(CentOS7)下Nginx安装

修改 nginx.conf 文件,nginx 配置如下,修改后记得验证 nginx -t 是否正确,nginx -s reload 重启 nginx。

server {
listen 80;
server_name www.itwxe.com img.itwxe.com; location / {
root /itwxe/blogSite/public;
}
}

执行命令申请证书。

# www.itwxe.com SSL申请
acme.sh --issue -d www.itwxe.com -w /itwxe/blogSite/public # img.itwxe.com SSL申请
acme.sh --issue -d img.itwxe.com -w /itwxe/blogSite/public

申请过程非常快的,打印的日志也很简单,成功了就会提示 sucess,有错误也会提示 error。

生成成功之后的文件在 /root/.acme.sh/ 目录下,以域名为文件夹,SSL 证书就在这个目录下。

二、Nginx配置https

首先把生成的 SSL 证书复制到自己的目录,我是在 nginx 目录下创建了一个 ssl 目录专门用来存放证书。

cp /root/.acme.sh/www.itwxe.com/{fullchain.cer,www.itwxe.com.key} /usr/local/nginx/ssl/www/

cp /root/.acme.sh/img.itwxe.com/{fullchain.cer,img.itwxe.com.key} /usr/local/nginx/ssl/img/

配置 https,这里我把实现 http 重定向 https,同时 itwxe.com 重定向 www.itwxe.com ,贴出自己的部分配置。

    server {
listen 80;
server_name *.itwxe.com;
# 将http请求转变为https
rewrite ^(.*) https://$host$1 permanent;
charset utf-8;
} server {
listen 443 ssl;
server_name itwxe.com;
ssl_certificate /usr/local/nginx/ssl/www/fullchain.cer;
ssl_certificate_key /usr/local/nginx/ssl/www/www.itwxe.com.key;
return 301 https://www.itwxe.com$request_uri;
} server {
listen 443 ssl;
server_name www.itwxe.com;
ssl_certificate /usr/local/nginx/ssl/www/fullchain.cer;
ssl_certificate_key /usr/local/nginx/ssl/www/www.itwxe.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
ssl_prefer_server_ciphers on;
proxy_connect_timeout 500;
proxy_send_timeout 500;
proxy_read_timeout 500;
client_max_body_size 200m;
location / {
root /itwxe/blogSite/public;
index index.html;
}
} server {
listen 443 ssl;
server_name img.itwxe.com;
ssl_certificate /usr/local/nginx/ssl/img/fullchain.cer;
ssl_certificate_key /usr/local/nginx/ssl/img/img.itwxe.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
ssl_prefer_server_ciphers on;
proxy_connect_timeout 500;
proxy_send_timeout 500;
proxy_read_timeout 500;
client_max_body_size 200m;
location /blog {
root /itwxe/dockerData/minio/data;
autoindex on;
}
}

验证配置和重启 nginx。

nginx -t

nginx -s reload

验证之后可以看到网站小绿标已经加上了,证书查看也可以看到确实是三个月有效期。

三、自动续期

前面说了正常情况下脚本配置了定时任务每天都会检查证书是否过期,超过两个月就认为证书要过期了,重新续签证书。

但是这种情况下并不会将重新生成的证书并不会复制到 nginx 的 ssl 目录下,并重启nginx,那么就自己写个脚本管理,同时将定时任务修改为每 10 天的凌晨 00:28 分检查 证书是否要过期了。

我在 /itwxe/cron/ssl/ 目录下创建 checkSSL.sh 执行脚本,添加下面内容。

#!/bin/bash

echo "================================开始执行时间:$(date +%Y-%m-%d\ %H:%M:%S)"

echo "================================检查证书是否过期:"
"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" echo "================================复制www证书到nginx ssl目录"
cp -r /root/.acme.sh/www.itwxe.com/{fullchain.cer,www.itwxe.com.key} /usr/local/nginx/ssl/www/
echo "================================复制img证书到nginx ssl目录"
cp -r /root/.acme.sh/img.itwxe.com/{fullchain.cer,img.itwxe.com.key} /usr/local/nginx/ssl/img/ echo "================================重启nginx"
nginx -s reload echo -e "================================结束执行时间:$(date +%Y-%m-%d\ %H:%M:%S)\n"

赋予可执行权限。

chmod +x checkSSL.sh

crontab -e 删除原来的定时任务,添加定时任务。

28 0 */10 * * /itwxe/cron/ssl/checkSSL.sh >> /itwxe/cron/ssl/checkSSL.log 2>&1

重启定时任务

systemctl restart crond

当然为了检验效果可以,设置最近的时间进行校验是否可以正常执行,例如设置每天18:03执行定时任务。

3 18 * * * /itwxe/cron/ssl/checkSSL.sh >> /itwxe/cron/ssl/checkSSL.log 2>&1

到这里,就实现了网站的 https 化。

都读到这里了,来个 点赞、评论、关注、收藏 吧!

文章作者:IT王小二

首发地址:https://www.itwxe.com/posts/c0cb6cbc/

版权声明:文章内容遵循 署名-非商业性使用-禁止演绎 4.0 国际 进行许可,转载请在文章页面明显位置给出作者与原文链接。

使用Let’s Encrypt实现网站https化的更多相关文章

  1. 最新阿里云申请免费SSL证书实现网站HTTPS化(图文教程一)

    一.申请免费SSL证书: 1.登录阿里云: 2.领取代金券礼包: https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=0a ...

  2. 使用Let’s Encrypt轻松配置https站点

    使用Let's Encrypt轻松配置https站点 https不仅能提高网站安全,更是被搜索引擎纳入排名的因素之一. 2015年10月份,微博上偶然看到Let's Encrypt 推出了beta版, ...

  3. 网站https证书SSL证书相关

    网站https证书SSL证书相关 二级域名可以申请证书来使用,主域名申请的单域名证书,二级域名不在https加密保护内,通配符证书可以保护主域名下所有的二级子域名,二级域名等于和主域名使用的同一张证书 ...

  4. nginx安装Lets Encrypt SSL免费HTTPS加密证书

    Linux Nginx网站:Certbot安装配置Lets Encrypt SSL免费HTTPS加密证书 原文地址:https://renwole.com/archives/157 实验环境:Cent ...

  5. 关于大型网站技术演进的思考(二十一)--网站静态化处理—web前端优化—下【终篇】(13)

    本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部,不过该企业把这个事业部里的人事成本,系统运维成本特别 ...

  6. 关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)

    网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...

  7. 阿里云slb和ucloud负载均衡ulb添加ssl证书将http服务https化的配置详解

    阿里云和ucloud服务器配置ssl证书将http服务https化的配置详解 项目背景: 苹果App于2017年1月1日将启用App Transport Security安全功能,即强制App通过HT ...

  8. 关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)

    讲完了SSI,ESI,下面就要讲讲CSI了 ,CSI是浏览器端的动静整合方案,当我文章发表后有朋友就问我,CSI技术是不是就是通过ajax来加载数据啊,我当时的回答只是说你的理解有点片面,那么到底什么 ...

  9. 网站静态化处理—web前端优化—下【终篇】(13)

    网站静态化处理—web前端优化—下[终篇](13) 本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部, ...

随机推荐

  1. What are CBR, VBV and CPB?

    转自:https://codesequoia.wordpress.com/2010/04/19/what-are-cbr-vbv-and-cpb/ It's common mistake to to ...

  2. 克鲁斯卡尔(Kruskal)算法(代码)

    算法代码 C#代码 using System; using System.Linq; namespace Kruskal { class Program { static void Main(stri ...

  3. mac 安装jmeter

    1.打开jemeter网址 http://jmeter.apache.org/download_jmeter.cgi 2.下载Binaries中的 apache-jmeter-5.0.tgz 3.解压 ...

  4. 拿到列表的长度len(列表名)

    拿到列表的长度len(列表名),即元素个数 列表要放在括号里面

  5. make clean 清除之前编译的可执行文件及配置文件。 make distclean 清除所有生成的文件。

    https://blog.csdn.net/bb807777/article/details/108302105 make clean 清除之前编译的可执行文件及配置文件.make distclean ...

  6. pgrep cron

    # pgrep cron947[root@localhost cron]# pgrep --help Usage: pgrep [options] <pattern> Options: - ...

  7. IT菜鸟之总结(Du teacher)

    初次接触云计算,从以前对计算机的一窍不通,经过这三周的学习,起码是通了一窍了:哈哈,至少是对计算机的组成及系统的安装都有了认识,也初次学习了Linux系统,对其的发展和使用有了认识,也学到了一些基础的 ...

  8. Redis 哨兵模式配置

    搭建步骤 第一步: 在 redis.conf 配置文件目录下拷贝三份 sentinel.conf 文件 [root@node-01 redis-5.0.9]# cp sentinel.conf sen ...

  9. 11.6 mpstat:CPU信息统计

        mpstat 是Multiprocessor Statistics的缩写,是一种实时系统监控工具.mpstat命令会输出CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CP ...

  10. 『动善时』JMeter基础 — 24、JMeter中使用“用户参数”实现参数化

    目录 1.用户参数组件介绍 2.用户参数界面介绍 3.使用"用户参数"组件实现参数化 (1)测试计划内包含的元件 (2)线程组元件内容 (3)HTTP请求组件内容 (4)用户参数组 ...