使用PowerShell脚本自动续期证书并导入Windows远程桌面
590 字
3 分钟
使用PowerShell脚本自动续期证书并导入Windows远程桌面
前言
因为每次使用域名访问远程桌面时都会弹出证书警告,所以打算给远程桌面搞一个SSL证书,并实现自动导入和续期功能。
准备
域名
Git
ZeroSSL账号
Windows 11专业版
安装acme.sh
要在Windows里使用acme.sh,需要有bash环境,这里使用的是Git自带的Bash。
Win+S输入git bash打开命令窗口,输入
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为你的域名。
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换成你的域名。
cd "C:\Program Files\Git\bin"#续期证书.\bash.exe $env:HomePath\.acme.sh\acme.sh --renew --dns dns_cf -d your.domain.comcd ~\.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= $ThumbprintRead-Host -Prompt "Press Enter to exit"这个脚本的作用是先续期证书(不强制,如未过期则跳过),导入证书并设置NETWORK SERVICE用户(远程桌面)访问私钥的权限,将证书指纹导入注册表以便远程桌面使用。
完成
如果要定时运行脚本,可以在Win+X->计算机管理->任务计划程序->任务计划程序库里去创建计划任务。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
使用PowerShell脚本自动续期证书并导入Windows远程桌面
https://blog.dotuoodo.top/posts/remotedesktop/最后更新于 2024-10-16
部分内容可能已过时











