一款免费且好用的SSL证书管理工具(OHTTPS)

【一】自建站SSL证书的痛点

【1】引言

  • 自己瞎折腾,搭建了一个个人的博客平台(https://lupf.cn);作为程序员,B格还是得有的,因此,SSL证书也就必须得安排上呢,不然一访问,显示不安全的链接,有点丢不起那个人。
  • 可是,各大云平台的免费SSL证书,都只支持二级域名,没办法配置泛域名,导致每添加一个二级域名,就得新申请一个SSL证书,假如都到期了话,就得全部重新申请一遍,重新配置一遍,着实麻烦;
  • 如果要使用泛域名,就得付费购买,一年小几千的;而对于白嫖党,花这笔几K的费用,着实有点不划算;因此就盯上了Let’s Encrypt证书,其泛域名证书免费,唯一不太好的就是,证书只有三个月。
  • 但是这三个月的有效期又成为了一个新的问题,以至于每过三个月,就得重新申请一次,替换,又是个麻烦事儿。
  • 我想对于自建站点的,应该都有遇到这个问题(土豪除外)。

【2】问题点

  • 泛域名证书解决了,如何解决自动更新的问题?

【二】泛域名证书解决自动更新方案

【1】使用ACME自动更新证书(不推荐)

  • 使用ACME确实解决了我云服务器上面的证书问题,配置脚本自动检测,快到期的时候,自动更新证书,然后重启NG,但是解决了一个自动更新服务器证书的问题,但是遇到了另外两个新的问题:

    • 证书更新异常

    • 可能是我自己配置的问题,偶尔会出现自动更新失败的情况

  • CDN无法更新

    • CDN的https证书(SSL证书)是单独配置的,各个云服务商是可以申请SSL证书或者上传SSL证书,然后CDN去关联证书进行配置
  • 通过ACME解决了服务器的证书问题,但是CDN的证书只能手动上传到云服务商;至此,和手动更新就没有什么区别。

  • 但是呢,各大服务商都提供了API允许通过代码的方式去上传,那有没有什么工具可以帮助我们上传呢?

  • 无意间,一位大神在我一篇申请腾讯云免费SSL证书的博客下评论了一个他自己开发的工具;

  • 从此开启了一个新的世界;
    image-20201018225908869

【2】使用ohttps更新证书(推荐使用)

  • 经过我的个人亲测,完美解决了我的问题,且云服务的NG,CDN的证书,都能够正常的管理且自动更新;

  • 作者的文档写的已经很好了,这里只是将部署过程中遇到的一些小小的问题归纳总结一下,方便大家的快速使用;

  • 同时,鉴于作者对我的帮助,这里帮着推广一下。

    • 我再帮我的大佬推广一下!

【三】证书申请

【1】注册账户

【2】添加域名

image-20201018230736003

  • 注意这里有一个坑,虽然大佬给的格式是这样的但是其实真的格式是

  • *.自己的域名

    • 我猜大佬的域名可能是 .cn 结尾的,所以他才这样写的,大家注意如果下面的解析过不去注意改一下

【2】添加域名解析

image-20201018230831331

  • 这里也是同上面
    • _acme-challenge.你的域名
    • 在解析记录的时候
  • 主机记录
    • _acme-challenge (应该大家的都是这个)
  • 记录类型
    • CNAME
  • 线路类型
    • 默认
  • 记录值
    • 上面提供给你的记录值
  • 其他默认即可
  • 上面可以看到你域名对应的主机记录记录值,然后在你的域名解析下添加上面的记录,注意下面红色箭头的地方

【3】解析记录值

image-20230905153454336

【4】申请证书

image-20230905160129286

  • 到此,证书就已经申请完成了

【四】Nginx配置自动更新证书

  • ohttps采用的是通过Docker的方式部署Nginx

  • 作者提供了nginx的镜像,封装了nginx自动更新ssl证书相关的功能,对使用者来说跟使用官方的Nginx没有任何区别

  • 因此,只需要基于作者提供的Nginx的镜像启动服务即可轻松配置自动更新

  • 如果不知道docker及docker-compose的

【1】下载镜像

docker pull ohttps/ohttps-nginx
  • 上面的下载可能比较的慢,建议作者上传了一个阿里云的镜像,下载方式如下
docker pull registry.cn-hangzhou.aliyuncs.com/ohttps/ohttps-nginx

【2】申请Docker推送的id及key

(1)选择部署节点

image-20230905160548229

(2)添加节点

image-20230905160610785

(3)选择docker 并 生成令牌

image-20230905160710849

(4)关联自己的证书

image-20230905160745138

(5)查看自己的部署参数

image-20230905160906044

【3】创建nginx的配置文件;nginx.conf

  • 注意这里
    • 先要在你的本地 etc/nginx 文件夹下创建 文件夹 certificates/cert-xxxx
    • 同时上传你已经做好的证书文件,否则会报错起不起来
[root@VM-8-11-opencloudos nginx]# ls
conf    docker-compose.yml  html  mime.types  nginx.conf      scgi_params
conf.d  fastcgi_params      logs  modules     nginx.conf.bak  uwsgi_params

[root@VM-8-11-opencloudos nginx]# mkdir certificates

[root@VM-8-11-opencloudos nginx]# ls
certificates  conf.d              fastcgi_params  logs        modules     nginx.conf.bak  uwsgi_params
conf          docker-compose.yml  html            mime.types  nginx.conf  scgi_params

[root@VM-8-11-opencloudos nginx]# cd certificates/

[root@VM-8-11-opencloudos certificates]# ls

[root@VM-8-11-opencloudos certificates]# mkdir cert-xxxx

[root@VM-8-11-opencloudos certificates]# ls
cert-xxxx

[root@VM-8-11-opencloudos certificates]# cd cert-xxxx/

[root@VM-8-11-opencloudos cert-xxxx]# ls

[root@VM-8-11-opencloudos cert-xxxx]# rz
 ZMODEM  Session started            
------------------------            
 Sent  cert.key               00023be50

[root@VM-8-11-opencloudos cert-xxxx]# rz
 ZMODEM  Session started            
------------------------            
 Sent  fullchain.cer               be50

[root@VM-8-11-opencloudos cert-xxxx]# ls
cert.key  fullchain.cer
  • 注意 www.test.com 修改为你自己的域名
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server {
        listen              443 ssl;
        server_name         www.test.com;
        ssl_certificate     /etc/nginx/certificates/cert-xxxx/fullchain.cer;
        ssl_certificate_key /etc/nginx/certificates/cert-xxxx/cert.key;

        include /etc/nginx/default.d/*.conf;

        location / {
            root   /usr/share/nginx/html;
            index  index.html;
        }
    }
}

【4】创建并配置docker-compose.yml

  • 文件和nginx.conf放在同一个目录
  • 注意下面的PUSH_NODE_IDPUSH_NODE_TOKEN对应上面的节点名称令牌
version: "2"

services:
  nginx:
    container_name: ohttps-nginx
    image: ohttps/ohttps-nginx
    restart: always
    ports:
      - "8443:443"
    environment:
      PUSH_NODE_ID: "push-xxxx"
      PUSH_NODE_TOKEN: "xxxx"
    volumes:
      - ./conf/nginx.conf:/etc/nginx/nginx.conf
      - ./conf/conf.d:/etc/nginx/conf.d
      - ./html:/usr/share/nginx/html
      - ./logs:/var/log/nginx
      - ./certificates:/etc/nginx/certificates
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./conf/conf.d:/etc/nginx/conf.d
- ./html:/usr/share/nginx/html
- ./logs:/var/log/nginx
- ./certificates:/etc/nginx/certificates
  • 注意这几个文件的位置,文件结构树
.
├── certificates
│   └── cert-xxxx
│       ├── cert.key
│       └── fullchain.cer
├── conf
│   ├── conf.d
│   └── nginx.conf
├── docker-compose.yml
├── html
└── logs
    └── error.log
  • 如果懂Docker的,我在说一下
    • 这个文件结构不限于必须在nginx文件下,可以在任意位置
      • 比如我的文件位置在 etc/ohttps
    • 但是上面必要的参数比如配置文件的位置不能错
  • 如果不懂的萌新就在nginx文件夹下补充必要的文件夹和文件就行
    • etc/nginx

【5】启动镜像

  • 注意要在nginx.conf对应的目录下执行,因为下面用到了$PWD/nginx.conf寻找配置
  • 启动镜像
docker-compose -f docker-compose.yml up -d
  • 启动之后,进入到对应的镜像,然后在/etc/nginx/certificates目录下看是否已经更新了对应的证书;
  • 如果对应的目录下存在cert.keyfullchain.cer证书,说明自动更新成功了;

image-20201019000058904

【6】测试证书

  • 访问站点,看对应的证书如下图,说明正常

image-20201019000437604

【五】CDN证书上传(以腾讯云CDN为例)

  • ohttps官方还支持阿里云、七牛云的CDN

【1】腾讯云开启访问权限(重要,开启api接口访问权限)

【2】添加部署节点

image-20201019174918154

image-20201019174901954

  • 后面步骤一样的

【3】手动部署

image-20201019002309510

  • 上传成功之后,可以在:https://console.cloud.tencent.com/ssl 下查看;
  • 如下图所示,这两个证书已经关联了我个人的CDN,所以完全无需进行手动配置了。

image-20201019002447181

【六】CDN配置(腾讯云为例)

【1】添加域名

【2】配置https证书

image-20201019180530484

【3】添加完之后,CDN中就自动关联上对应域名的配置

image-20201019180805842

【4】添加CDN的域名解析

image-20201019181319327

  • 添加完之后,cdn中红色的警告消失了,说明配置正常

  • 到这里,CDN相关的配置也就完了

【5】证书监控

  • 可以在下图的地方添加证书网站证书的监控,会在每天凌晨3点检测证书剩余有效期,如果达到自动更新的阈值,就会进行自动更新操作。

image-20201019183104894

【6】自动更新

  • 官方默认会在到期的前30天自动更新,如果没有更新成功的话,会在到期的前20天以邮件的形式提醒,如果有什么问题,也可以手动更新,也就只是点吧点吧就好了,很简单的。

【7】关于收费

  • ohttps是使用虚拟币进行支付的,注册就送1000个币,每次自动部署单节点扣除50,手动部署扣除25;
  • 1000个也足够用好久了,推荐用户还可以赠送1000,这样就相当于免费使用了,币没有了,推荐那么几个用户就又可以用上几年了,再说,好东西不就应该让更多的人知道,更多的人使用麽;就算是付费,作者的收费也很便宜,1分钱一个币;单次部署就仅仅几毛钱;却能为我们省去那么多事儿。赞!!!快用起来吧!
posted @ 2023-09-05 19:36  Chimengmeng  阅读(559)  评论(0编辑  收藏  举报