假如是个人布置网站,那么现在有许多免费的证书供咱们挑选,例如Let’s Encrypt、ZeroSSL等等。在前面咱们介绍过怎么运用Cerbot东西请求Let’s Encrypt证书,不过Cerbot运用起来仍然是有一些杂乱的。

除此之外,尽管阿里云也提供免费证书,可是现在阿里云免费证书请求一次只管3个月了,也十分不方便。

运用现在引荐一个更加强壮且快速的证书请求脚本:acme.sh,它不只内置多种免费证书,还支持主动化地请求和续期证书。

今日,咱们就来学习一下怎么运用这个脚原本完结证书请求,以及一些常用的证书办理指令。

acme.sh脚本的官网:传送门

1,装置acme.sh

衔接到你的服务器,经过下列指令即可装置:

curl https://get.acme.sh | sh -s email=youremail@example.com

需求将上述youremail@example.com换成你自己的邮箱。

装置完结后记住先从头衔接服务器或许重启终端,然后能够履行下列指令检查是否装置成功:

acme.sh -v

能够输出版本号信息则成功。

上述的装置指令事实上履行了下列过程:

  • acme.sh脚本下载到你的home目录下的.acme.sh/目录中
  • 在你的.bashrc中创建了别号alias acme.sh=~/.acme.sh/acme.sh,使得咱们能够运用acme.sh指令
  • 主动创建了体系守时使命cronjob,会在每天0点主动检测一切的证书,假如有证书快过期了则会主动更新证书

2,一键请求证书

下面我将介绍几种请求证书的方式,咱们依据实际情况挑选其一即可

(1) 在你的服务器上请求

假如你就在你的服务器上装置了acme.sh,并且已经将域名解析到了你的服务器,那么就能够直接在服务器上请求了!

履行下列指令:

acme.sh --issue -d example.com --standalone

将上述example.com替换成你自己的域名,需求留意下列几点:

  • 现在服务器上没有运转任何Web服务,即80端口空闲
  • 该域名已成功解析到当时服务器

稍等片刻,呈现Success字样,并且输出了你的证书文件方位阐明生成成功了:

快速且主动化的证书请求-acme.sh请求和办理证书

可见该方式十分的快捷,事实上acme.sh有很多请求证书的模式,上述咱们运用的是Standalone模式,该模式下acme.sh假装自己是一个Web服务器,临时监听80端口完结验证。

假如请求证书过程中呈现赤色字报错:Please install socat tools first,则先履行下列指令装置socat东西:

sudo apt install socat

(2) 凭借Cloudflare API请求证书

在之前咱们请求证书都需求手动在域名解析商装备TXT DNS完结验证,事实上acme.sh还支持十分多域名解析商的API完结主动化证书请求。

今日以Cloudflare为例,完结用Cloudflare解析域名时,凭借其API主动化完结证书请求,这儿就不再赘述怎么将域名解析权交给Cloudflare了。

首要登录你的Cloudflare账户,点击右上角我的个人资料:

快速且主动化的证书请求-acme.sh请求和办理证书

点击左侧栏API令牌,检查下面的Global API Key:

快速且主动化的证书请求-acme.sh请求和办理证书

输入暗码后,仿制下该API密钥备用:

快速且主动化的证书请求-acme.sh请求和办理证书

然后在服务器上,履行下列指令完结证书请求:

export CF_Email="你的Cloudflare账户邮箱"
export CF_Key="你的Cloudflare Global API Key"
acme.sh --issue --dns dns_cf -d example.com

可见只需设定CF_EmailCF_Key两个环境变量分别是你的Cloudflare邮箱和仿制的Key,然后就能够请求了!上述example.com替换成你自己的域名。

3,仿制证书文件

acme.sh会将证书生成在~/.acme.sh/你的域名_ecc/目录下,可是咱们不能直接运用它们,需求凭借--install-cert指令将其仿制出来,例如:

acme.sh --install-cert -d example.com 
--cert-file "./cert/cert.pem" 
--key-file "./cert/key.pem" 
--fullchain-file "./cert/fullchain.pem"

上述-d后面仍然是接你的域名,然后后面几个参数意义如下:

  • --cert-file 指定仿制你的证书文件到哪个方位
  • --key-file 指定仿制你的证书密钥文件到哪个方位
  • --fullchain-file 指定仿制你的全链证书文件到哪个方位

一般来说,以Nginx为例,咱们只需装备证书文件证书密钥文件即可,因而--fullchain-file能够省略。

4,常用证书办理指令

(1) 检查已装置证书

首要能够经过下列指令列出全部证书:

acme.sh --list

能够看到一切证书信息,榜首列便是咱们证书域名:

快速且主动化的证书请求-acme.sh请求和办理证书

然后能够经过下列指令检查某个详细证书详细信息:

acme.sh --info -d example.com

(2) 续期证书

咱们请求的证书通常有效期是3个月,并且acme.sh是能够主动续期咱们一切证书的。

不过需求手动续期时,能够经过下列指令续期某个证书:

acme.sh -r -d example.com

也能够一键全部续期:

acme.sh --renew-all

(3) 撤消和移除证书

假如证书不需求了,咱们能够将其撤消,需求留意的是:撤消不是删去证书就行了

首要经过下列指令撤消证书:

acme.sh --revoke -d example.com

呈现Revoke success阐明撤消成功。

不过现在证书文件还残留在服务器上,经过下列指令移除:

acme.sh --remove -d example.com

到此,就完结了证书撤消和移除操作。

(4) 更换默许CA

默许情况下acme.sh请求的是ZeroSSL的证书,假如你想切换为其它的CA厂商也是能够的,例如咱们要切换成Let’s Encrypt厂商:

acme.sh --set-default-ca --server letsencrypt

履行该指令后,后续便是请求的Let’s Encrypt的证书了!

--server后接CA厂商名称,可用的名称如下:

  • letsencrypt
  • buypass
  • zerossl
  • sslcom
  • google
  • letsencrypt_test
  • buypass_test
  • googletest

test的通常是测试用的,仅引荐测试环境运用。

现在支持的CA厂商特性如下:

CA厂商 证书有效期 ECC证书 域名数量 支持通配符 NotAfter 国际化域名
Let’s Encrypt 90 100
ZeroSSL 90 100
Google 90 100
Buypass 180 5 付费
SSL.com 90 2 付费

能够依据自己需求设定和挑选。

(5) 转换为p12证书

尽管acme.sh生成的证书能够直接装备到Nginx、Apache等等Web服务器运用,不过有少量时分假如说想直接装备证书到Tomcat中(Spring Boot)那就需求将证书转换成p12格式了!

生成证书后,将证书文件证书密钥文件仿制出来,经过openssl指令转换:

openssl pkcs12 -export -in "证书文件途径" -inkey "证书密钥文件途径" -out "指定生成的p12证书文件途径"

履行指令会让你设定p12证书的暗码,自行设定即可。

然后在Spring Boot装备文件装备如下:

# SSL证书设置
server.ssl.key-store=证书jks文件所在方位
server.ssl.key-store-password=证书暗码
server.ssl.keyStoreType=PKCS12

server.ssl.key-store装备项需求以classpath:或许file:最初,一般classpath:最初的表示jar包内途径,Maven项目中srcmainresources文件夹即可对应为classpath的根目录,而file:对应的是jar包外相对途径或许绝对途径。

# classpath途径
server.ssl.key-store=classpath:ssl.p12
# jar包外途径
server.ssl.key-store=file:ssl/ssl.p12

5,参阅文档

acme.sh有着丰富的文档,本文参阅如下: