使用PowerShell脚本自动续期证书并导入Windows远程桌面

590 字
3 分钟
使用PowerShell脚本自动续期证书并导入Windows远程桌面

前言#

因为每次使用域名访问远程桌面时都会弹出证书警告,所以打算给远程桌面搞一个SSL证书,并实现自动导入和续期功能。

准备#

域名

Git

ZeroSSL账号

Windows 11专业版

安装acme.sh#

要在Windows里使用acme.sh,需要有bash环境,这里使用的是Git自带的Bash。

Win+S输入git bash打开命令窗口,输入

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

这将会安装acme.sh到用户目录,路径为:

C:\Users\你的用户名\acme.sh

申请证书#

因为远程桌面服务的特殊性,这里使用DNS验证来申请证书。可以使用acme.sh的DNS API模式来完成DNS验证和证书签发(可自动续期证书),这些命令需要在Bash环境下运行。

Cloudflare的如下,需要提供token和accound id。

注意修改example.com为你的域名。

Terminal window
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxx"
acme.sh --issue --dns dns_cf -d example.com

成功运行完后,证书应该会在C:\Users\你的用户名\.acme.sh里生成。

自动续期并设置远程桌面证书#

我写了一个Powershell脚本用来自动续期和设置远程桌面的证书,这个ps1文件需要放在C:\Users\你的用户名\.acme.sh路径里。注意在第3和第6行把your.domain.com换成你的域名。

Terminal window
cd "C:\Program Files\Git\bin"
#续期证书
.\bash.exe $env:HomePath\.acme.sh\acme.sh --renew --dns dns_cf -d your.domain.com
cd ~\.acme.sh\
#生成pfx证书
openssl pkcs12 -export -in your.domain.com_ecc/your.domain.com.cer -inkey your.domain.com_ecc/your.domain.com.key -out certificate.pfx -certfile your.domain.com_ecc/ca.cer -passin pass: -passout pass:
#获取证书指纹
$str = openssl x509 -fingerprint -sha1 -in .\certificate.pfx | Select-String -Pattern 'sha1'
$str1 = ($str -split "=")[1]
$Thumbprint = $str1.replace(":","")
echo "Thumbprint:$Thumbprint"
#导入证书
$params = @{
FilePath = 'certificate.pfx'
CertStoreLocation = 'Cert:\LocalMachine\My'
}
$CertObj = Import-PfxCertificate @params -Exportable
$serviceUser = "NETWORK SERVICE"
#获取证书私钥
$privateKey = [System.Security.Cryptography.X509Certificates.ECDsaCertificateExtensions]::GetECDsaPrivateKey($CertObj)
echo $privateKey.Key | Format-List *
$containerName = $privateKey.Key.UniqueName
$keyFullPath = $env:ProgramData + "\Microsoft\Crypto\Keys\" + $containerName
#设置私钥权限
$acl = (Get-Item $keyFullPath).GetAccessControl()
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($serviceUser, "Read", "Allow")
$acl.AddAccessRule($accessRule)
Set-Acl -Path $keyFullPath -AclObject $acl
#添加注册表证书指纹
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash= $Thumbprint
Read-Host -Prompt "Press Enter to exit"

这个脚本的作用是先续期证书(不强制,如未过期则跳过),导入证书并设置NETWORK SERVICE用户(远程桌面)访问私钥的权限,将证书指纹导入注册表以便远程桌面使用。

完成#

如果要定时运行脚本,可以在Win+X->计算机管理->任务计划程序->任务计划程序库里去创建计划任务。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

使用PowerShell脚本自动续期证书并导入Windows远程桌面
https://blog.dotuoodo.top/posts/remotedesktop/
作者
DOTUOODO
发布于
2024-02-27
许可协议
CC BY-NC-SA 4.0

评论

Profile Image of the Author
DOTUOODO
Nothing is immortal, but at least we can be extraordinary.
公告
欢迎来到我的博客!目前还在施工中...
分类
标签

文章目录