使用Let’s Encrypt实现网站https化
使用 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化的更多相关文章
- 最新阿里云申请免费SSL证书实现网站HTTPS化(图文教程一)
一.申请免费SSL证书: 1.登录阿里云: 2.领取代金券礼包: https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=0a ...
- 使用Let’s Encrypt轻松配置https站点
使用Let's Encrypt轻松配置https站点 https不仅能提高网站安全,更是被搜索引擎纳入排名的因素之一. 2015年10月份,微博上偶然看到Let's Encrypt 推出了beta版, ...
- 网站https证书SSL证书相关
网站https证书SSL证书相关 二级域名可以申请证书来使用,主域名申请的单域名证书,二级域名不在https加密保护内,通配符证书可以保护主域名下所有的二级子域名,二级域名等于和主域名使用的同一张证书 ...
- nginx安装Lets Encrypt SSL免费HTTPS加密证书
Linux Nginx网站:Certbot安装配置Lets Encrypt SSL免费HTTPS加密证书 原文地址:https://renwole.com/archives/157 实验环境:Cent ...
- 关于大型网站技术演进的思考(二十一)--网站静态化处理—web前端优化—下【终篇】(13)
本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部,不过该企业把这个事业部里的人事成本,系统运维成本特别 ...
- 关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)
网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...
- 阿里云slb和ucloud负载均衡ulb添加ssl证书将http服务https化的配置详解
阿里云和ucloud服务器配置ssl证书将http服务https化的配置详解 项目背景: 苹果App于2017年1月1日将启用App Transport Security安全功能,即强制App通过HT ...
- 关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)
讲完了SSI,ESI,下面就要讲讲CSI了 ,CSI是浏览器端的动静整合方案,当我文章发表后有朋友就问我,CSI技术是不是就是通过ajax来加载数据啊,我当时的回答只是说你的理解有点片面,那么到底什么 ...
- 网站静态化处理—web前端优化—下【终篇】(13)
网站静态化处理—web前端优化—下[终篇](13) 本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部, ...
随机推荐
- 如何用Vim搭建IDE?
推荐:http://harttle.com/2015/07/18/vim-cpp.html 转自:http://harttle.com/2015/11/04/vim-ide.html 一年前我从Vim ...
- 在ActiveMQ中使用SingleConnectionFactory遇到的坑
我们在生产环境使用了ActiveMQ作为消息中间件,消息中间件连接到数据库对消息进行持久化. 最近发生了一个奇怪的事情,消费者端的生产日志总是报如下错误: The JMS connection has ...
- [c++] 基本概念
内存 栈区和堆区的管理模式有所不同:栈区内存由系统分配和释放,不受程序员控制:堆区内存完全由程序员掌控,想分配多少就分配多少,想什么时候释放就什么时候释放,非常灵活. 栈(Stack)可以存放函数参数 ...
- [Java] HOW2J(Java初级)
变量 基本类型:整型(byte.short.int.long).字符型(char).浮点型(float.double).布尔型(boolean) 给基本类型赋值的方式叫字面值 字符的字面值放在单引号中 ...
- centos下如何查看命令由哪个包提供
今天在使用centos进行端口查看的时候发现系统没有netstat命令 yum安装发现并没有同名的包 经过一番查阅 学习到了 yum whatprovides/provides [commandNam ...
- :整数 跳转到该行 Vim中常用的命令
:set nu 显示行号 :set nonu 不显示行号 :命令 执行该命令 :整数 跳转到该行 :s/one/two 将当前光标所在行的第一个one替换成two :s/one/two/g 将当前光标 ...
- /etc/ssh/sshd_config ssh自动断 cent7
vim /etc/ssh/sshd_config ClientAliveInterval 60ClientAliveCountMax 8630000 ClientAliveInterval 30Cli ...
- Linux 根目录所在分区被脏数据占满
背景: 公司在做一个项目,大概功能就是一个通行闸机的人脸识别系统,要经过门禁的人注册了之后,系统就会存储一张原始的图片在服务器的数据文件夹里面,包括了永久的存储和一些访客注册临时存储.一天周五的时 ...
- Qt 进度条
一.前言 有时我们需要在表格(QTableWidget).树状栏(QTreeWidget)中直观显示任务进度或消耗百分比,达到报表显示的形式,可通过重写QLabel的方式实现. 1.进度条控件功能 1 ...
- SpringBoot额外依赖
spring-boot-configuration-processor <dependency> <groupId>org.springframework.boot</g ...