Question

J'ai une structure qui CERT_CONTEXT Je l'ai extrait d'une carte à puce sur Windows via le CryptoAPI. Je dois convertir cette structure en un tableau d'octets codé DER qui est compatible avec OpenSSL. Le match le plus proche que j'ai jusqu'à présent est par CryptEncodeObject utilisant X509_ASN_ENCODING et le modificateur X509_CERT_TO_BE_SIGNED qui prend la la structure CERT_INFO comme entrée.

Le problème est qu'il ne correspond pas à la sortie produite par le OpenSSL i2d_X509 fonction. L'utilisation d'un certificat x509 2048 bits en entrée, OpenSSL produit 1789 octets de sortie encodée tandis que Windows CryptoAPI produit 1638 octets de sortie encodée.

La seule option que je peux voir est de créer un cert X509 à la volée en utilisant les valeurs de la la structure CERT_CONTEXT et l'encodage de l'objet résultant directement avec le fonction de i2d_X509. Le seul problème est que je ne peux pas extraire la clé privée de la carte à puce, donc cela peut causer des problèmes avec les routines de création de cert x509.

Si quelqu'un peut fournir des conseils / Toute idée / conseils sur ces questions, je serais bien obligé.

Était-ce utile?

La solution

certificat codé DER peut être obtenu à partir de (ctx-> pbCertEncoded, ctx-> cbCertEncoded) tampon où ctx est un objet PCCERT_CONTEXT. Pourtant, vous ne serez pas en mesure de récupérer la clé privée.

scroll top