我正在开发一个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);
不知道是什么原因。如果任何人有关于应用程序服务需要的任何额外配置的信息,这将对我有很大的帮助。太感谢你了!
在Azure环境中使用SignMessageMessage方法
1条答案
按热度按时间mxg2im7a1#
尝试如下代码更改:
将“your-thumbprint”替换为证书的实际指纹。