提问人:fernando rodriguez 提问时间:9/12/2023 更新时间:10/4/2023 访问量:16
System.Security.Cryptography.Pkcs 的 ComputeSignature 方法适用于 localhost,但不适用于 Azure 应用服务
The ComputeSignature method of System.Security.Cryptography.Pkcs works on localhost but not on an azure app service
问:
我正在开发一个 c# Web API。我添加了一个类库来连接到外部 Web 服务。要登录到该资源,将执行以下方法:
/// <summary>
/// Firma mensaje
/// </summary>
/// <param name="messageBytes">Bytes del mensaje</param>
/// <param name="signerCertificate">Certificado usado para firmar</param>
/// <returns>Bytes del mensaje firmado</returns>
/// <remarks></remarks>
public static byte[] SignMessageBytes(byte[] messageBytes, X509Certificate2 signerCertificate)
{
const string ID_FNC = "[FirmaBytesMensaje]";
try
{
// Pongo el mensaje en un objeto ContentInfo (requerido para construir el obj SignedCms)
var contentInfo = new ContentInfo(messageBytes);
var signedCms = new SignedCms(contentInfo);
// Creo objeto CmsSigner que tiene las caracteristicas del firmante
var cmsSigner = new CmsSigner(signerCertificate)
{
IncludeOption = X509IncludeOption.EndCertOnly
};
if (VerboseMode) Console.WriteLine(ID_FNC + "***Firmando bytes del mensaje...");
// Firmo el mensaje PKCS #7
signedCms.ComputeSignature(cmsSigner);
if (VerboseMode) Console.WriteLine(ID_FNC + "***OK mensaje firmado");
// Encodeo el mensaje PKCS #7.
return signedCms.Encode();
}
catch (Exception ex)
{
throw new Exception(ID_FNC + "***Error al firmar: " + ex.Message);
}
}
这在本地主机环境中完美运行。但是,当我将其发布到 Azure 应用服务时,它失败并出现以下错误: 在行中The system cannot find the file specified.
signedCms.ComputeSignature(cmsSigner);
不知道原因可能是什么。如果有人有关于应用服务所需的任何额外配置的信息,那将对我有很大帮助。非常感谢!
获取 SignMessageBytes 方法以在 Azure 环境中工作
答:
0赞
الرحمن الرحیم
10/4/2023
#1
尝试如下代码更改:
// Find the certificate by thumbprint
X509Certificate2Collection certs = store.Certificates.Find(
X509FindType.FindByThumbprint,
"your-thumbprint",
false
);
if (certs.Count > 0)
{
X509Certificate2 signerCertificate = certs[0];
// Continue with signing using signerCertificate
}
else
{
throw new Exception("Certificate not found.");
}
将“your-thumbprint”替换为证书的实际指纹。
评论