2011-02-01 16 views
4

私は、Windows上のスマートカードからCryptoAPI経由で抽出したCERT_CONTEXT構造を持っています。この構造体をOpenSSLと一貫性のあるDERでエンコードされたバイト配列に変換する必要があります。私がこれまでに得た最も近いマッチは、X509_ASN_ENCODINGとCERT_INFO構造体を入力とするX509_CERT_TO_BE_SIGNEDモディファイアを使用してCryptEncodeObject経由です。Windows CryptoAPIとOpenSSL x509のフォーマット間の変換

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

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

誰もがこれらの問題に洞察力/アドバイス/ヒントを提供できる場合、私は多くの義務があります。

答えて

6

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

+0

Argh !,私の目の前で、全体の時間:)、ありがとう、私は決してこれを見つけたことがないだろう、私は自分の心はCryptEncodeObject関数を使用して設定していた。私は秘密鍵は必要ありません。私は署名操作のソースデータとして公開鍵エンコーディングを使用しています。 –

関連する問題