起因

早上收到了一封来自MySSL EE <noreply@notify.myssl.com>的邮件提示证书即将过期, 少于7天,但是acme.sh应该是60天自动renew的。于是查看下安装的证书列表:

acme.sh --list

结果如下(已排版):

Main_Domain:*.lovemiku.info  ""
KeyLength:lovemiku.info
Created:Wed Sep 12 02:01:06 UTC 2018
Renew:Sun Nov 11 02:01:06 UTC 2018

查询到应该是11月11日更新过但是实际上并没有更新。

才想起以前是通过手动添加DNStxt解析来认证的,可能会失效?

于是这次准备直接换成API认证。

acme.sh的DNS API认证支持各大解析商,在此可以查询。

下面是完整安装到申请证书的流程。

安装acme.sh

根据中文文档可以可知,输入以下指令便可以安装成功。

curl  https://get.acme.sh | sh

安装完后:

在用户home目录下生成一个.acme.sh文件夹,使用ls -a可以查看

自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了(默认60天), 需要更新, 则会自动更新证书。使用crontab -l命令可以查看任务。

使用DNS解析商API认证并且生成证书

我的域名是在namesilo购买的,所以先去查询API,然后导入:

vim /etc/profile

添加APIKey

export Namesilo_Key="your api key"

使其生效:

source /etc/profile

生成泛域名证书,一定要含有顶级域名yourdomain.com和泛域名*.yourdomain.com

900为等待生效时间,每个解析商时间可能不同,默认120秒。

acme.sh --issue --dns dns_namesilo --dnssleep 900 -d yourdomain.com -d *.yourdomain.com

个人生成结果如下,可以看到成功生成了证书:

acme.sh --issue --dns dns_namesilo --dnssleep 900 -d lovemiku.info -d *.lovemiku.info
Multi domain='DNS:lovemiku.info,DNS:*.lovemiku.info'
Getting domain auth token for each domain
Getting webroot for domain='lovemiku.info'
Getting webroot for domain='*.lovemiku.info'
Found domain api file: /root/.acme.sh/dnsapi/dns_namesilo.sh
Successfully added TXT record, ready for validation.
Sleep 900 seconds for the txt records to take effect
Verifying:lovemiku.info
It seems the CA server is busy now, let's wait and retry. Sleeping 1 seconds.
Success
*.lovemiku.info is already verified, skip dns-01.
Removing DNS records.
Successfully retrieved the record id for ACME challenge.
Successfully removed the TXT record.
Verify finished, start to sign.
Cert success.
-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----
Your cert is in /root/.acme.sh/lovemiku.info/lovemiku.info.cer
Your cert key is in /root/.acme.sh/lovemiku.info/lovemiku.info.key
The intermediate CA cert is in /root/.acme.sh/lovemiku.info/ca.cer
And the full chain certs is there: /root/.acme.sh/lovemiku.info/fullchain.cer

安装证书

普通安装证书直接输入以下指令:

坑注意-d后面的域名地址不要用*.yourdomain.com,否则当访问yourdomain.com时会出现证书错误

acme.sh --installcert -d yourdomain.com \
--key-file /path/to/key/yourdomain.key \
--fullchain-file /path/to/key/fullchain.cer \
--reloadcmd "systemctl force-reload nginx"

由于我有2台vps都在使用这个域名,所有我想把证书上传到另一个机器,就需要写一个shell脚本。由于要上传文件远程reload nginx,于是先把另一台机器的ssh密钥上传到生成证书的vps中,然后更改权限:

chmod 600 /root/Server_JP/id_rsa

接下来新建一个脚本文件UploadCert.sh,使用vim添加以下执行代码:

[ip]:去掉[]修改为目标vpsip

[port]:去掉[]修改为目标vpsssh端口

[username]:去掉[]修改为目标vps登录名

[password]:去掉[]修改为目标vps密码

[/path/to/save]:去掉[]修改为目标vps需要保存证书的目录

[/local/path/to/copy]:去掉[]修改为当前vps保存证书的目录

[yourdomain.key]:去掉[]修改为安装证书时命名的key名称

#!/bin/bash
#上传文件
ftp -n<<FtpEnd
open [ip]
user [username] [password]
binary
hash
cd [/path/to/save]
lcd [/local/path/to/copy]
prompt
mput [yourdomain.key] fullchain.cer
close
bye
FtpEnd
#登录ssh刷新nginx
ssh -T -i [/path/to/rsa] [username]@[ip] -p [port] << SSHEnd
echo "Connect to remote server."
systemctl force-reload nginx
echo "Force reload nginx."
exit
SSHEnd

保存后更改权限:

chmod +x UploadCert.sh

修改前面安装的代码,添加一个--reloadcmd来执行脚本,如下:

acme.sh --installcert -d lovemiku.info \
--key-file /etc/nginx/sites/lovemiku.key \
--fullchain-file /etc/nginx/sites/fullchain.cer \
--reloadcmd "systemctl force-reload nginx" \
--reloadcmd "/root/MyScript/UploadCert.sh"

执行结果如下,没有报错应该完美完成,检查下目标vps上文件更改时间和nginxforce-reload时间即可。

Installing key to:/etc/nginx/sites/lovemiku.key
Installing full chain to:/etc/nginx/sites/fullchain.cer
Run reload cmd: /root/MyScript/UploadCert.sh
Hash mark printing on (1024 bytes/hash mark).
Local directory now /etc/nginx/sites
Interactive mode off.
#
###
Connect to remote server.
Force reload nginx.
Reload success

结语

就这样很简单就完成了SSL证书的Renew,到底能不等60天后自动更新。

执行acme.sh --list可以查看Renew的具体时间,等2019年2月份,我再来看看是否会自动Renew。

本文也发表在自己的博客https://lovemiku.info/2018/12/04/how-to-use-acme-sh.html

使用acme.sh快速生成SSL证书的更多相关文章

  1. Linux下使用acme.sh 配置https 免费证书

    acme.sh 简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书.acme.sh 有以下特点:一个纯粹用Shell(Unix shell)语言编写的 ...

  2. openssl生成ssl证书

    openssl生成ssl证书 x509证书一般会用到三类文,key,csr,crt. Key 是私用密钥openssl格,通常是rsa算法. Csr 是证书请求文件,用于申请证书.在制作csr文件的时 ...

  3. 生成ssl证书文件

    网上关于生成SSL证书文件的方法有很多,但我查了几个,发现有或多或少的错误,如下我图文并茂的展示,亲测无任何问题,分享给大家,谢谢. 1.创建根证书密钥文件(自己做CA)root.key openss ...

  4. JDK自带工具keytool生成ssl证书

    前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全. 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具: ...

  5. 使用openssl生成SSL证书完全参考手册

    一般来说,配置HTTPS/SSL的步骤为: 1.生成足够强度的私钥.需要考虑:算法,广泛采用的一般是RSA.键长度,RSA默认为512,一般应选择2048.密码,虽然私钥不一定要加密存储,但是加密存储 ...

  6. 用 letsencrypt 生成 SSL 证书

    letsencrypt 生成 SSL 证书 事先配置好访问域名解析 在nginx 对应虚拟主机添加一个验证区域: 配置 nginx server { listen 80; ... location ~ ...

  7. 使用keytool生成ssl证书

    使用keytool生成ssl证书 在项目中由于要使用https访问项目,然后了解到jdk有一个自带的工具keytool可以用来生成ssl证书,从而可以通过https进行访问. 使用keytool生成s ...

  8. 如何在 CentOS 7 上生成 SSL 证书为 Nginx 加密

    本文首发:开发指南:如何在 CentOS 7 上安装 Nginx Let’s Encrypt 是由 Internet Security Research Group (ISRG) 开发的一个自由.自动 ...

  9. 用XCA(X Certificate and key management)可视化程序管理SSL 证书(2)--生成SSL证书请求

    在上个章节中,我们提到了怎样安装XCA(X Certificate and key management)程序.这个章节我们開始正式介绍怎样用XCA生成证书请求.假设大家用过java的话.肯定知道jd ...

随机推荐

  1. HDU 4585 Shaolin(STL map)

    Shaolin Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit cid= ...

  2. 轻松学习JavaScript二十二:DOM编程学习之节点操作

    DOM编程不只能够查找三种节点,也能够操作节点.那就是创建,插入,删除.替换和复制节点.先来看节点 操作方法: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...

  3. Linux中的find命令

    .递归查找(find 命令 是递归遍历文件夹的) 命令:find . -name “*.txt” //当前路径下递归查找以.txt结尾的文件夹 .不递归查找 find . -name “*.txt” ...

  4. 互不侵犯_状压$dp$

    如果有想学习状压\(dp\)的童鞋,请光临博客状压\(dp\)初学 互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八 ...

  5. springmvc 1.接受日期类型的参数 2.后台返回json串的格式处理(返回json串null值处理为"")

    springmvc中的配置: <bean id="dateConvert" class="com.iomp.util.DateConvert"/> ...

  6. [ Java ] [ Eclipse ] content Auto activation triggers

    重點: That plug-in is not necessary any more. Just go to Preferences > Java > Editor > Conten ...

  7. PHPSTORM+Xdebug断点调试代码

    如果没有安装 PHPSTORM 可以参考 phpstorm10安装并汉化 一.下载 XDEBUG 下载地址:https://xdebug.org/download.php 二.如何快速寻找适合自己PH ...

  8. POJ 3539 Elevator(同余类BFS)

    题意 有一部电梯,最初停在1层. 电梯有4个按键,上升a,b,c层,回到一层. 求从一层出发.能到达1~h的哪些楼层. (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一 ...

  9. python 进阶:修饰器的介绍

    参考链接:Python 函数装饰器 我认为python中的装饰器是一个很厉害的功能,他能瞬间提升代码的逼格,但对于我这样的小白来说,别说为所欲为的使用了,就连简单的尝试一下,却也是难于登天.经过长达半 ...

  10. Object-C,四则运算计算器

    下面是是一个比较复杂的类. 定义一个四则运算计算器Caculator的接口和实现. 在main函数中,让用户输入四则运算表达式,比如a+b,a-b. 最后,在控制台输出结果. 用到的语法:接口.类的定 ...