gpt4 book ai didi

c# - 证书未正确签名

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:26 24 4
gpt4 key购买 nike

我正在使用 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:

在 CSR 解码器中检查证书时 http://certlogik.com/decoder/ ,公钥信息的模数字段有一个前导 00 字节,在使用 KeyPal 检查公钥时不存在。谁能告诉我我需要做什么来修复这个错误?

最佳答案

对于任何感兴趣的人:

传递到 CryptSignAndEncodeCertificate 的 CERT_INFO 结构包含一个 SubjectPublicKeyInfo 字段,它是一个 CERT_PUBLIC_KEY_INFO 结构。我最初试图获取从 CryptExportPublicKeyInfo 接收到的指针,并通过 Marshal.PtrToStructure 将其分配给 SubjectPublicKeyInfo。事实证明,Marshal.PtrToSStructure 只是导致 SubjectPublicKeyInfo 指向与返回指针相同的内存位置。当指针被释放时,内存失效并且 SubjectPublicKeyInfo 处于未确定状态。绕过它的方法是创建一个新结构,然后将这个新结构分配给 SubjectPublicKeyInfo。这会导致新结构中的值被复制到 SubjectPublicKeyInfo,因此它的内存位置永远不会失效。或者至少这是我能想到的最接近的。如果有人有更好的解释,我很乐意听到。

关于c# - 证书未正确签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25536217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com