2017-02-13 3 views
2

J'ai un certificat au format PEM que je veux convertir au format DER en utilisant les fonctions OpenSLL en C++.Conversion de PEM en DER en C++

Comment puis-je le faire?

Merci.

+0

openssl x509 -outform der -in certificate.pem certificate.der https://www.sslshopper.com -out /ssl-converter.html – user1438832

+0

Comment puis-je le faire en C++ en utilisant les fonctions openssl? – itayb

+0

Voir aussi [Utiliser la clé OpenSSL RSA avec .Net] (http://stackoverflow.com/q/30475758/608639). Il vous montre quelques astuces C++ avec 'unique_ptr' pour gérer les ressources. – jww

Répondre

1

Vous pouvez le faire comme -

#include <stdio.h> 
#include <openssl/x509.h> 
#include <openssl/pem.h> 
#include <openssl/err.h> 

void convert(char* cert_filestr,char* certificateFile) 
{ 
    X509* x509 = NULL; 
    FILE* fd = NULL,*fl = NULL; 

    fl = fopen(cert_filestr,"rb"); 
    if(fl) 
    { 
     fd = fopen(certificateFile,"w+"); 
     if(fd) 
     { 
      x509 = PEM_read_X509(fl,&x509,NULL,NULL); 
      if(x509) 
      { 
       i2d_X509_fp(fd, x509); 
      } 
      else 
      { 
       printf("failed to parse to X509 from fl"); 
      } 
      fclose(fd); 
     } 
     else 
     { 
      printf("can't open fd"); 
     } 
     fclose(fl); 
    } 
    else 
    { 
     printf("can't open f"); 
    } 
} 


int main() 
{ 
    convert("abc.pem","axc.der"); 
    return 0; 
} 
+0

merci, juste une question de plus, si je l'obtiens en tant que chaîne et non en tant que fichier, comment puis-je le faire? merci beaucoup – itayb

-1

Essayez ceci -

void convert(const unsigned char * pem_string_cert,char* certificateFile) 
{ 
    X509* x509 = NULL; 
    FILE* fd = NULL; 

    BIO *bio; 

    bio = BIO_new(BIO_s_mem()); 
    BIO_puts(bio, pem_string_cert); 
    x509 = PEM_read_bio_X509(bio, NULL, NULL, NULL); 

    fd = fopen(certificateFile,"w+"); 
    if(fd) 
    { 
      i2d_X509_fp(fd, x509); 
    } 
    else 
    { 
     printf("can't open fd"); 
    } 
    fclose(fd); 
} 
+0

merci beaucoup – itayb