文章目录
- 介绍(直接翻译的)
- 特点
- 准备
- 设置Powershell脚本权限
- 安装Posh-ACME
- 导入Posh-ACME模块
- 设置Email
- 申请DNS操作权限
- 生成证书
- 查看证书位置
- 效果
介绍(直接翻译的)
PowerShell模块和ACME客户端,用于从具有 ACME 功能的证书颁发机构(例如Let’s Encrypt )创建公共信任的 SSL/TLS 证书。
特点
- 支持多域 (SAN) 和通配符 (*.example.com) 证书
- IP 地址证书(RFC 8738)(需要 ACME CA 支持)
- 新证书的一体化命令,New-PACertificate
- 轻松续订Submit-Renewal
- 支持账户和证书的 RSA 和 ECDSA 密钥
- 针对基于DNS 和 HTTP的挑战的内置验证插件。(欢迎提出请求)
- 支持预先创建的证书请求 (CSR)
- PEM 和 PFX 输出文件
- 无需提升 Windows 权限(除非使用-Install交换机)
- 跨平台 PowerShell 支持。(常见问题解答)
- 帐户密钥滚动支持
- OCSP Must-Staple支持
- DNS 挑战CNAME 支持
- 每个 ACME CA 支持多个 ACME 帐户
- 为需要它的 ACME CA 提供外部账户绑定支持(指南)
- 首选链支持使用替代 CA 信任链(指南)
- PowerShell SecretManagement支持(指南)
- 基于草案 04 的ARI(ACME 更新信息)支持。
准备
使用的是Powershell的一个模块,叫Posh-ACME
,在使用前,如果电脑没有安装过,需要先安装该模块,该模块可以快速的帮助我们从Let's Encrypt
那里申请为期90天的SSL/TLS证书,并且支持通配符。
设置Powershell脚本权限
这个没什么好描述的,就是一般系统默认不允许运行ps脚本代码,这里需要修改一下计算机脚本执行策略
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
安装Posh-ACME
该操作只要执行一遍即可!!!
该操作只要执行一遍即可!!!
该操作只要执行一遍即可!!!
# install for all users (requires elevated privs)
Install-Module -Name Posh-ACME -Scope AllUsers
# install for current user
Install-Module -Name Posh-ACME -Scope CurrentUser
导入Posh-ACME模块
该操作只要执行一遍即可!!!
该操作只要执行一遍即可!!!
该操作只要执行一遍即可!!!
Import-Module Posh-ACME
设置Email
这里设置Email是方便后期,证书快要到期时,向你的邮箱发送过期提醒
# 本人真实email哦,别搞我😐
$email = 'admin@haozekang.com'
申请DNS操作权限
在域名托管商那里申请DNS操作API\Token\AK、SK,我的域名托管在阿里云那边,所以我使用的是账户的AK和SK。
具体支持哪些运营商,可以在DNS Plugins里查询,下面我将使用阿里云作为示范,使用example.com
作为样例,各位宝宝🥰在使用的时候,记得替换。
给的模板脚本如下:
# 这里会让你手动输入SK,麻烦,我给改成String转SecureString
$secret = Read-Host "Secret" -AsSecureString
$pArgs = @{
AliKeyId = 'asdf1234'
AliSecret = $secret
}
我的:
# 这里是随便填写的,请替换成自己的
# 设置sk,并转换为SecureString类型
$secret = ConvertTo-SecureString "asdf1234asdf1234asdf1234111111" -AsPlainText -Force
# 这里是随便填写的,请替换成自己的
# 设置参数,后面要让Posh-ACME自动化操作你的DNS解析,帮你做TXT记录值验证工作
$pArgs = @{
AliKeyId = 'asdf1234asdf1234asdf1234'
AliSecret = $secret
}
生成证书
进入正题,一下命令就是开始申请证书的一些操作了!~
New-PACertificate '*.example.com','example.com' -AcceptTOS -Plugin Aliyun -PluginArgs $pArgs -Contact $email
输入上面命令后,默认会再操作好DNS后,睡眠120秒,等待安全厂商做TXT记录校验,执行完成后,会有如下界面
获取证书校验状态信息,这里的status
就是状态的意思,如果这里不是valid
,就代表没有校验通过!
Get-PAOrder '*.example.com'
完成证书订单
- 完成特定订单
Get-PAOrder '*.example.com' | Complete-PAOrder
- 完成当前订单
#
Complete-PAOrder
查看证书位置
Get-PACertificate | Format-List
每个文件对应的解释如下:
- cert.cer (Base64 encoded PEM certificate)
PS:基于PEM格式,Base64编码的证书文件,转pem直接修改文件后缀
- cert.key (Base64 encoded PEM private key)
PS:基于PEM格式,Base64编码的证书密钥文件,转pem直接修改文件后缀
- cert.pfx (PKCS12 container with cert+key)
PS:基于PKCS12格式,加密的证书文件,包含了证书+密钥
- chain.cer (Base64 encoded PEM with the issuing CA chain)
PS:基于PEM格式,Base64编码的证书链文件,转pem直接修改文件后缀
- chainX.cer (Base64 encoded PEM with alternate issuing CA - chains)
PS:懒得翻译,我也用不到
- fullchain.cer (Base64 encoded PEM with cert+chain)
PS:基于PEM格式,Base64编码的文件,转pem直接修改文件后缀,包含了证书+证书链
- fullchain.pfx (PKCS12 container with cert+key+chain)
PS:基于PKCS12格式,加密的证书文件,包含了证书+密钥+证书链
我们一般使用nginx作为HTTP服务器的话,只需要关注前两个cert.cer
、cert.key
即可,cer
文件改后缀为pem
,我一般会把两个文件改一下命名在上传到nginx使用。
使用方法我就不提供了,百度浪浪一层,我就不废话了!