折腾起因

最近做了个小网站wawoo.fun,一个做mac壁纸的小网站,网站还处在初级阶段,不能跟大神的比。网站发布后发现因为没有使用https,谷歌浏览器会在地址栏提示网站不安全。因此想提升下网站的逼格,把网站由http升级为https。

阿里云免费证书只支持单域名

我买的是阿里云的服务器,因此想到之前看到阿里云有送免费的https证书,遂打开阿里云证书申请页面,发现赠送的免费证书只支持单域名的。我的站点至少需要一个支持wawoo.fun和www.wawoo.fun的证书,申请两个单域名证书,然后再在nginx中分别配置,这个太low了,不是我想要的,通配符证书才是我想要的,但是阿里云的通配符证书太贵了,不是我这个小站长消费的起的,于是放弃阿里云的证书,寻找其他方案。

Let's Encrypt提供免费通配符证书

经过搜索发现,真的有提供免费通配符类型证书的机构,那就是Let's Encrypt,Let's Encrypt已为1.8亿个网站提供了HTTPS证书,它是一个非盈利性证书颁发机构,其颁发的证书受所有主流浏览器厂商的信任,安全可靠。

Let's Encrypt证书申请客户端选择

申请Let's Encrypt的免费证书,需要使用Let's Encrypt的证书申请客户端,官方推荐的是certbot,是脚本类型的,其他的证书申请客户端还有很多。遂搜索了一下大家常用的证书申请客户端,比较常用的是acme.sh,和certbot一样是脚本类型的,试用了一下,确实很强大,在配置了阿里云的域名解析API接口授权参数后,可以自动更新证书,更新后自动重启nginx,超级方便。

遇到问题:证书自动更新后无法自动多节点部署

在准备使用acme.sh后,突然发现一个问题,就是如果我以后要扩充nginx容器的数量,证书自动更新就有问题了,多个容器内acme.sh会各自更新各自的,就会生成多个不一样的证书,而且一旦我的容器个数超过5个,同时更新会触法Let's Encrypt的证书更新请求速率限制,导致5个之外的所有容器都会更新失败,这个不利于以后容器的扩展。而且如果我需要在阿里云的CDN中部署证书,还要在每次证书更新后手动将证书上传到阿里云的CDN中,很不便捷。

找到答案:OHTTPS可在证书更新后自动部署至多节点

为了解决上面的问题,并充分发扬我懒的本质,我又开始了我的搜索之旅,经过了持久的搜索后,发现了这个宝藏站点ohttps.com,这个网站提供了我想要的所有功能。OHTTPS提供了证书的申请、吊销、到期前通知、自动更新、更新后自动部署,并可自动部署至阿里云或腾讯云的负载均衡、CDN或证书列表中,还可以部署至Nginx容器中,并支持多节点自动部署。哇,真是太棒了,这个正是我想要的功能啊,更棒的是提供了免DNS授权模式,也就是不需要提供阿里云域名解析API的accessKey和accessKeySecret就可以实现自动更新

使用OHTTPS创建证书

首先需要注册一个OHTTPS的账号,注册成功之后登录进去打开证书管理页面,点击创建证书,然后进入创建证书步骤:

  • 1、选择证书类型,这里我们选择泛域名证书,也就是通配符证书,然后输入我们的域名

  • 2、选则验证域名所有权方式,这里我们选择免DNS授权模式,然后它会提示需要添加1条CNAME类型的记录至DNS域名解析记录中,我们按照它的提示将记录添加至wawoo.fun的域名解析记录中

  • 3、点击创建证书,证书申请开始了

  • 4、1 ~ 2分钟之后证书申请成功,可以点击查看证书内容

  • 5、点击管理证书后,会在证书管理页面中看到我们申请的证书

在OHTTPS中创建证书Nginx容器部署节点

要使OHTTPS在证书自动更新后自动部署到Nginx容器中,我们需要先创建部署节点。选择部署节点菜单,点击添加节点,然后我们选择Docker - Nginx,点击生成令牌,这个令牌是在使用容器时会使用到的,下面我会使用到。

在OHTTPS中配置证书自动更新、自动部署

在证书管理页面中,选择我们刚才创建的证书,点击配置,在这里我们可以对证书进行配置:到期前是否进行通知、是否自动更新、更新后是否自动部署、部署至那些节点等。我们全部选择自动,然后将我们刚才创建的部署节点添加进来。

构建我们自己的nginx容器镜像

在OHTTPS中证书配置完成后,我们需要构建自己的nginx容器镜像。这里需要用到OHTTPS官方提供的ohttps/ohttps-nginx容器镜像作为基础镜像,这个镜像也是基于nginx官方镜像构建的,添加了证书更新功能,证书从服务器拉取过来之后,会存在容器内部的/etc/nginx/certificates文件夹下,证书文件具体存放位置如下:

  • 件私钥文件cert.key:
`/etc/nginx/certificates/${证书ID}/cert.key`
  • 证书文件fullchain.cer:
`/etc/nginx/certificates/${证书ID}/fullchain.cer`

其中证书ID是我们创建完证书后生成的证书ID,在证书管理页面可以看到。然后我们可以在我们自己的nginx配置文件中使用证书文件:

ssl_certificate     /etc/nginx/certificates/cert-o17xk289ev09d43l/fullchain.cer;
ssl_certificate_key /etc/nginx/certificates/cert-o17xk289ev09d43l/cert.key;

设置完nginx配置文件nginx.conf之后,我们需要编辑我们自己的Dockerfile文件,用以构建我们自己的镜像。在Dockerfile文件中,需要设定两个环境变量:

  • PUSH_NODE_ID:就是我们创建的部署节点的ID,在部署节点管理页面可以看到
  • PUSH_NODE_TOKEN:就是我们创建部署节点时点击生成的32位的Token

下面是Dockerfile文件:

FROM ohttps/ohttps-nginx:1.0.1
WORKDIR /etc/nginx
COPY ./nginx.conf /etc/nginx/nginx.conf
ENV PUSH_NODE_ID='push-k7l13g8j30xm9qp4'
ENV PUSH_NODE_TOKEN='0bfff9fc3024453819c4f107a397ca86'

Dockerfile文件编辑完成之后,就可以生成镜像,然后我们就可以使用我们自己的镜像启动我们自己的nginx容器。这样就实现了在证书到期前,自动更新证书,并自动将证书推送至Nginx容器中,永远都不需要再担心证书过期了。

我写的OHTTPS使用简介不是很详细,具体怎么使用OHTTPS,还请看OHTTPS官方文档快速上手OHTTPS,具体怎么使用OHTTPS的Docker - Nginx类型部署节点,也请看OHTTPS官方文档部署节点 - Docker - Nginx

免费申请通配符类型SSL证书的更多相关文章

  1. GeoTrust 企业(OV)型 通配符(Wildcard) SSL证书

      GeoTrust 企业(OV)型 通配符(Wildcard)SSL证书(GeoTrust True BusinessID Wildcard SSL Certificates),支持通配符(Wild ...

  2. WDCP V3.2面板安装且新增PHP多版本和免费Let's Encrypt SSL证书

    文章原文:http://www.itbulu.com/wdcp-v32.html 我们很多网友对于WDCP面板应该算是比较熟悉的,老蒋在博客中也多次分享WDCP面板的相关教程内容,因为在平时帮助网友解 ...

  3. 使用OpenSSL生成CSR文件,并申请全球通用SSL证书

    http://www.openssl.org 上只有OpenSSL的原代码下载,为了方便Windows用户使用OpenSSL,我们特地为您准备了OpenSSL 0.9.8.a for win32的可执 ...

  4. Weblogic申请和配置SSL证书

    一. 概述 SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协 ...

  5. Let's Encrypt 免费通配符 SSL 证书申请教程——但是也需要email,域名所有权等,如果是黑产用的话会这样用吗?会不会暴露自己身份???

    Let's Encrypt 免费通配符 SSL 证书申请教程 from:https://blog.csdn.net/English0523/article/details/79608464 2018 ...

  6. 新版startssl 免费SSL证书申请 (实测 笔记 https http2 必要条件)

    简单说明: 目前多个大型网站都实现全站HTTPS,而SSL证书是实现HTTPS的必要条件之一. StartSSL是StartCom公司旗下的.提供免费SSL证书服务并且被主流浏览器支持的免费SSL.包 ...

  7. startssl,免费的ssl证书申请及注意事项

    免费的ssl证书,https://www.startssl.com/ 安装到IIS和Nginx有所不同.原文 http://blog.newnaw.com/?p=1232 ------------转自 ...

  8. 免费SSL证书(https网站)申请

    如何拥有一个自己的免费的SSL证书,并且能够长期拥有.这篇文章让你找到可用的免费证书o(* ̄︶ ̄*)o 各厂商提供的免费SSL基本是Symantec(赛门铁克),申请一年,不支持通配符,有数量限制. ...

  9. 实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题

    最近需要https这里看到一份不错的博客,收录一下! Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust ...

随机推荐

  1. iOS 启动时间优化

    在 WWDC 2016 上首次提到了关于 App 应用启动速度优化的话题:Session 406 Optimizing App Startup Time. 一.冷启动与热启动 热启动是,APP会恢复之 ...

  2. 15.自动部署web工程

    用maven自动部署web工程 在pom.xml中写入以下: <build> <!--最终名称,进入网页时有http://localhost:8080/xxx/--> < ...

  3. MySQL的MVCC机制

    1.MVCC简介 1.1 MVCC是什么? MVCC,Multi-Version Concurrency Control,多版本并发控制.MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对 ...

  4. JavaScript实现哈希表

    JavaScript实现哈希表 一.哈希表简介 1.1.认识哈希表 哈希表通常是基于数组实现的,但是相对于数组,它存在更多优势: 哈希表可以提供非常快速的插入-删除-查找操作: 无论多少数据,插入和删 ...

  5. JS烟花案例

    html代码部分 <!DOCTYPE html> <!-- * @Descripttion: * @version: * @Author: 小小荧 * @Date: 2020-03- ...

  6. 用c#每日更换“必应背景图片”为“桌面壁纸”

    必应每天都会更换背景图片,都非常漂亮,有的时候还十分惊艳,同时还会根据每个地区的特色不同应用不同的图片. 下面用c#抓取必应每天的背景图片,并实现桌面壁纸的每天自动切换 实现思路 1.通过获取&quo ...

  7. Spring Boot创建一个HelloWorld项目

    目录 Spring Boot 简介 微服务框架 以前使用spring开发web的方式 Spring Boot 启动器介绍 如何创建一个helloword的SpringBoot项目 Spring Boo ...

  8. Java技巧之——判断相等

    变量值的判断是java中重要的一部分 通常我们判断两个值是否相等,使用的是两个等号 == 为了防止少写一个等号,造成无法挽回的失误,判断写为下面的格式 int a; 12==a; 原理是不能将任何东西 ...

  9. AbstractQueuedSynchronizer概述

    AbstractQueuedSynchronizer 是一个用于在竞争资源(如多线程)时使用的同步器,它内部使用了一个int类型的字段status表示需要同步的资源状态, 并基于一个先进先出(FIFO ...

  10. Python中判断输入字符串是否为数字的方法

    在写物理实验图像处理的脚本时,遇到了一个判断输入的字符串是否为数字的方法 最开始我的思路是这个 test = input() while test.isdigit(): # do something ...