使用 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. OOP第四章博客

    OOP第四章博客作业 (1)本单元作业架构设计 1)针对于第一次作业,我是将所给类进行了自己的封装,在MyUmlInteraction类里面进行关系的建立,这里把所给的UmlClass建立好,同时有i ...

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

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

  3. ==与equals比较

    提到==与equals的区别,这就必须先回顾一下jvm内存的分配机制 ==和equals无非比较两个基本数据类型或者对象类型 八种基本类型: 基本类型 大小 默认值 封装类 byte 1 0 Byte ...

  4. [java] IDEA

    快捷键 shift+shift:搜索 ctrl+d:复制行 ctrl+x:删除行 ctrl+p:查看方法参数 ctrl+o:查看类方法 ctrl+h:查看类结构 ctrl+i:实现接口方法 ctrl+ ...

  5. ocalhost kernel: [244840.301449] nf_conntrack: nf_conntrack: table full, dropping packet

    nf_conntrack: table full, dropping packet. 终结篇   "连接跟踪表已满,开始丢包"!相信不少用iptables的同学都会见过这个错误信息 ...

  6. Linux进阶之排错

    Permission denied 检查selinux长时间没有响应 防火墙 nginx和httpd可以自检nginx和httpd有日志 /var/log/nginx/ /var/log/httpd/ ...

  7. 关于C语言的指针数组与指针数组的个人理解

    一.指针数组与指针数组 1,指针数组 顾名思义,即一个元素全部是指针的数组,其形式与普通数组相似,形式如 *a[N]. 在理解指针数组的使用方式前,我先来说下我个人对数组的理解. 比如一维整形数组(形 ...

  8. MYSQL数据库快速添加测试数据方法

    先添加两条数据,这里最好添加两条不一样的数据 INSERT INTO "表名"(**, **) VALUES (**,**),(**,**) 然后再次添加数据,这次把查询到的数据添 ...

  9. Python+Selenium学习笔记5 - python官网的tutorial - 交互模式下的操作

    这篇笔记主要是从Python官网的Tutorial上截取下来,再加上个人理解 1. 在交互模式下,下划线'_'还可以表示上一步的计算结果 2.引号转义问题. 从下图总结的规律是,字符串里的引号如果和引 ...

  10. java IO教程《四》

    properties使用 什么是Properties? Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置 ...