Azure 应用服务无法验证 .pfx 文件:证书验证失败,因为无法加载

多年来,我能够使用 this Stack Overflow answer 中的 OpenSSL 创建方法为 Azure 应用服务上的 SSL 绑定上传新的 pfx 文件:

openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt

但是,现在执行相同操作会产生此错误:

至少一个证书无效(证书验证失败,因为无法加载。)

pfx error

有什么方法可以解决这个问题?

stack overflow Azure App Service unable to validate .pfx file: Certificate failed validation because it could not be loaded
原文答案
author avatar

接受的答案

应用服务私有证书要求

应用服务私有证书必须满足 the following requirements

  • 导出为受密码保护的 PFX 文件,使用三重 DES 加密。
  • 包含至少 2048 位长的私钥
  • 包含证书链中的所有中间证书和根证书。

选项 1:在 OpenSSL 3+ 中使用旧提供程序

OpenSSL 3+ 不再默认使用 DES 加密。原始命令需要附加 -legacy-provider-pathlegacy.dll 的路径)参数:

openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -legacy -provider-path 'C:Program FilesOpenSSL-Win64bin'

选项 2:让 Windows 重新加密文件

如果由于某种原因您的 OpenSSL 安装不包含旧提供程序:

打开 PowerShell 并运行此命令,将 -FilePath 替换为非工作 pfx 文件的路径,并将密码 -String 参数替换为其各自的密码:

Import-PfxCertificate -FilePath "pfx file path" -CertStoreLocation Cert:LocalMachineMy -Password (ConvertTo-SecureString -String 'MyPassword' -AsPlainText -Force) -Exportable

成功的输出将如下所示:

export pfx result

使用此指纹将证书导出到新的 pfx 文件,替换 -Cert-FilePath 和密码 -String 参数:

Export-PfxCertificate -Cert Microsoft.PowerShell.SecurityCertificate::LocalMachineMyB56CE9B122FB04E29A974A4D0DB3F6EAC2D150C0 -FilePath 'newPfxName.pfx' -Password (ConvertTo-SecureString -String 'MyPassword' -AsPlainText -Force)

Azure 现在应该能够验证新的 pfx 文件输出。


答案:

作者头像

如果具体错误是

添加私钥证书时出错。至少一个证书无效(证书验证失败,因为无法加载)

如果您使用 OpenSSL 中的以下脚本生成

openssl pkcs12 -export -out forUploadToAzure.pfx -inkey privateKeyUsedToGenerateCRT.key -in certificateGenerated.crt

如果这是问题所在,那么......

当您运行 pfx 生成脚本时,OpenSSL 3 会生成更长的证书序列号。我建议从门户网站 ( https://slproweb.com/products/Win32OpenSSL.html ) 下载 OpenSSL 1,这将有助于生成更短的证书序列号,Azure pfx 导入工具将接受该序列号

参考 - https://learn.microsoft.com/en-us/answers/questions/192112/error-message-occurs-when-trying-to-upload-pfx-cer.html

作者头像

For me, the issue was simply solved by changing the password. My previous password had special characters, which then i changed to only alphabetic letters.

相关问题