我正在向 SQL 添加/更改证书(手动和通过 powershell 脚本编写)。
我找到证书 -> 将其添加到 SQL(在配置管理器中手动或通过 powershell -> 将证书的指纹放入 SQL 注册表中)。 这一切似乎运行良好。 但是当我续订证书时(右键单击证书 -> 所有任务 ->“使用新密钥续订证书...”),由于该证书过期或其他原因),旧指纹将保留在 SQL 注册表中,并且SQL 配置管理器将在证书所在位置显示一个空行。
是否有一种方法可以更新证书,而无需更改 SQL Server 配置管理器中的证书(指纹)?
你不能这样做。
指纹是证书中许多属性的哈希值。即使一个属性有微小的不同,也会导致证书哈希值显着不同。
A(...) 指纹是一个计算字段,即不是证书数据本身的一部分。在 GUI 中,这些称为属性。在 shell 扩展中,指纹称为“指纹”,在 Certutil 输出中称为“证书哈希”。由此我们可以推测指纹是某种哈希或单向函数(OWF),其友好名称为“指纹”。
更新证书后,您只需运行 tSql 脚本即可更新 SQL Server 上的证书绑定。 这篇文章详细介绍了它的外观。
然后您可以使用 PowerShell 的 SQL dbaTools 模块运行脚本。
# Define the server and certificate details
$server = "YOUR_SQL_SERVER"
$certThumbprint = "YOUR_CERT_THUMBPRINT"
# Check certificate expiration
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq $certThumbprint }
$expirationDate = $cert.NotAfter
$today = Get-Date
# If the certificate is near expiration, initiate the renewal process
if ($expirationDate -lt $today.AddDays(30)) {
# Renew certificate logic here (Let’s Encrypt, etc.)
The write-Host "Certificate is about to expire. Renewing..."
# Apply renewed certificate to SQL Server
# Restart SQL services if needed
}