4

CryptoAPIを介してWindowsのスマートカードから抽出したCERT_CONTEXT構造体があります。この構造を、OpenSSLと整合性のあるDERエンコードされたバイト配列に変換する必要があります。私がこれまでに得た最も近い一致は、X509_ASN_ENCODINGとCERT_INFO構造を入力として受け取るX509_CERT_TO_BE_SIGNED修飾子を使用するCryptEncodeObjectを介したものです。

問題は、 OpenSSLi2d_X509関数によって生成された出力と一致しないことです。2048ビットのx509証明書を入力として使用すると、OpenSSLは1789バイトのエンコードされた出力を生成し、WindowsCryptoAPIは1638バイトのエンコードされた出力を生成します。

私が見ることができる唯一のオプションは、 CERT_CONTEXT構造体からの値を使用してその場でX509証明書を作成し、結果のオブジェクトをi2d_X509関数で直接エンコードすることです。これに関する唯一の問題は、スマートカードから秘密鍵を抽出できないことです。そのため、x509証明書作成ルーチンで問題が発生する可能性があります。

誰かがこれらの問題についての洞察/アドバイス/ヒントを提供することができれば、私は大いに義務づけられるでしょう。

4

1 に答える 1

6

DERでエンコードされた証明書は、(ctx-> pbCertEncoded、ctx-> cbCertEncoded)バッファーから取得できます。ここで、ctxはPCCERT_CONTEXTオブジェクトです。それでも、秘密鍵を回復することはできません。

于 2011-02-01T19:13:12.813 に答える