A PowerShell module and ACME client to create publicly trusted SSL/TLS certificates from an ACME capable certificate authority such as Let’s Encrypt.
Install Posh-ACME
1
2
3
4
5
|
# 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
|
Apply for a wildcard domain name certificate with the Cloudflare plug-in
First, you can use the Get-PAPlugin
command to get the plugin parameter information
1
2
3
4
5
6
7
8
9
10
11
12
|
➜ ~ Get-PAPlugin Cloudflare -Params
Set Name: Bearer (Default)
Parameter Type IsMandatory
--------- ---- -----------
CFToken SecureString True
...
|
Here we use Bearer authentication.
1
2
3
4
5
6
7
|
$pArgs = @{
CFToken = (Read-Host 'API Token' -AsSecureString)
}
# Apply for a certificate
New-PACertificate 'example.com','*.example.com' -CertKeyLength 'ec-256' -AcceptTOS -Plugin Cloudflare -PluginArgs $pArgs
# Install the certificate
Get-PACertificate 'example.com' | Install-PACertificate
|
Renew the certificate and update the IIS website binding certificate
Create a new PowerShell script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
Submit-Renewal -AllOrders | ForEach-Object {
$cert = $_
Install-PACertificate $cert
$h = $cert.Subject
if ('example.com' -in $cert.AllSANs) {
$thumbprint = $cert.Thumbprint
$appid = "{$([System.Guid]::NewGuid())}"
$addr = "0.0.0.0:443"
netsh http delete sslcert ipport=$addr
netsh http add sslcert ipport=$addr certhash=$thumbprint appid=$appid
}
# Create symbolic links to facilitate third-party program references
Remove-Item -Path "$env:AppData\Certs\$h.*"
New-Item -Path "$env:AppData\Certs\$h.key" -ItemType SymbolicLink -Target $cert.KeyFile
New-Item -Path "$env:AppData\Certs\$h.cer" -ItemType SymbolicLink -Target $cert.FullChainFile
# Restart-Service -Name SunshineService
}
|
Create a scheduled task to execute periodically
Create a vbs script
1
2
3
4
5
6
|
Set shell = CreateObject("WScript.Shell")
prog = "powershell.exe -Nologo path\to\renewal.ps1"
shell.Run prog, 0, True
Set shell = Nothing
|
Create a new scheduled task and set Action to Start a program:
C:\Windows\System32\wscript.exe path\to\renewal.vbs