【发布时间】:2014-08-27 20:17:31
【问题描述】:
我正在使用 p/invoked CryptoAPI 调用通过 C# 创建一些自签名证书,以便在应用程序中使用。我将正确的信息分配给 CERT_INFO 结构,使用 CryptExportPublicKey 获取公钥。当我使用 CryptSignAndEncryptCertificate 加密证书时,结果值看起来是正确的,但是在使用 openssl -verify 进行测试时,我收到以下错误:
6704:error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01:.\crypto\rsa\rsa_pk1.c:100:
6704:error:04067072:rsa routines:RSA_EAY_PUBLIC_DECRYPT:padding check failed:.\crypto\rsa\rsa_eay.c:721:
6704:error:0D0C5006:asn1 encoding routines:ASN1_item_verify:EVP lib:.\crypto\asn1\a_verify.c:221:
在http://certlogik.com/decoder/ 的 CSR 解码器中检查证书时,公钥信息的模数字段有一个前导 00 字节,而使用 KeyPal 检查公钥时不存在该字节。谁能告诉我我需要做什么来解决这个错误?
【问题讨论】:
-
什么是
CryptSignAndEncryptCertificate?你有代码吗?使用 OpenSSL API 时,您通常只需以编程方式创建自签名证书;您不会经历 CSR 的中间步骤。 OpenSSL 的req实用程序可以创建自签名。您使用命令openssl req -x509 ...。-x509告诉它创建一个自签名,而不是一个请求。你可以在<openssl src>/apps/req.c找到源代码。 -
CryptSignAndEncodeCertificate 是 Windows CryptoAPI 中的函数调用之一。我没有使用 openSSL。
-
您确定
CryptSignAndEncryptCertificate是Windows 功能吗? google.com/#q=CryptSignAndEncryptCertificate+msdn 返回 0 个结果。如果您没有使用 OpenSSL,那么为什么会出现 OpenSSL 错误消息? -
msdn.microsoft.com/en-us/library/windows/desktop/… 我收到 openssl 错误消息,因为我使用 openssl 作为验证证书是否有效的独立方法。
标签: c# ssl certificate pinvoke cryptoapi