我在“windows 2012R2”上使用 open ssl 来生成自签名证书。 使用下面的命令我已经生成了证书
openssl genrsa -des3 -out ab.key
openssl req -new -x509 -key ab.key -out ab.crt
openssl pkcs12 -inkey ab.key -in ab.crt -export -out ab.pkcs12
openssl x509 -in ab.crt -out ab.pem
Getting the error while import the certificate - The selected certificate does not have the KeySpec
Exchange property. This property is required by SQL Server to import a certificat Import error: 0x2, Windows Native Error: 0x80092004
I have checked the opennssl config file but could not get like where to set this property.
一种方法是将您的证书转换为 pfx (pkcs12) 格式,它将获得 KeySpec 的默认值,即 KeySpec = 1 -- At_KEYEXCHANGE
使用 openssl 命令“pkcs12”,如下所示:
openssl pkcs12 -inkey mssql-key.pem -in mssql-cert.crt -export -out mssql-cert.pfx
您将在 certutil 的输出中得到以下信息:
certutil -dump -v .\mssql-cert.pfx
输出摘录:
......
hCryptProv = 000001372C300D00
KeySpec = 1 -- AT_KEYEXCHANGE
......
经过多次试验和错误后我发现的一件事是,如果您的证书包含证书链,则 SQL Server 无法正常工作,或者至少在我的情况下这是问题。我的 CA 是 Microsoft,我使用主机的 FQDN 为我的服务器颁发了一个新证书,一切都很好。但是,当我将证书从 MMC 导出到 PFX 文件时,默认情况下会导出证书路径中的所有证书。 SQL Server 正在导入主机证书上方的颁发证书,并且该证书没有设置 KEYSPEC = 1 选项。如果您知道去哪里查找,那么解决这个问题很容易。在 MMC 的导出证书向导中,只需清除“包括证书路径中的所有证书”选项,然后 SQL Server 就会导入正确的证书。