2014-04-17 38 views
4

我將如何去將C中的X509證書轉換爲人類可讀字符串。例如:X509結構到人類可讀字符串

X509* cert; 

-----BEGIN CERTIFICATE----- 
MIIExDCCA6ygAwIBAgIJAK0JmDc/YXWsMA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD 
VQQGEwJJTjELMAkGA1UECBMCQVAxDDAKBgNVBAcTA0hZRDEZMBcGA1UEChMQUm9j 
a3dlbGwgY29sbGluczEcMBoGA1UECxMTSW5kaWEgRGVzaWduIENlbnRlcjEOMAwG 
A1UEAxMFSU1BQ1MxKTAnBgkqhkiG9w0BCQEWGmJyYWphbkBSb2Nrd2VsbGNvbGxp 
bnMuY29tMB4XDTExMDYxNjE0MTQyM1oXDTEyMDYxNTE0MTQyM1owgZwxCzAJBgNV 
BAYTAklOMQswCQYDVQQIEwJBUDEMMAoGA1UEBxMDSFlEMRkwFwYDVQQKExBSb2Nr 
d2VsbCBjb2xsaW5zMRwwGgYDVQQLExNJbmRpYSBEZXNpZ24gQ2VudGVyMQ4wDAYD 
VQQDEwVJTUFDUzEpMCcGCSqGSIb3DQEJARYaYnJhamFuQFJvY2t3ZWxsY29sbGlu 
cy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfjHgUAsbXQFkF 
hqv8OTHSzuj+8SKGh49wth3UcH9Nk/YOug7ZvI+tnOcrCZdeG2Ot8Y19Wusf59Y7 
q61jSbDWt+7u7P0ylWWcQfCE9IHSiJIaKAklMu2qGB8bFSPqDyVJuWSwcSXEb9C2 
xJsabfgJr6mpfWjCOKd58wFprf0RF58pWHyBqBOiZ2U20PKhq8gPJo/pEpcnXTY0 
x8bw8LZ3SrrIQZ5WntFKdB7McFKG9yFfEhUamTKOffQ2Y+SDEGVDj3eshF6+Fxgj 
8plyg3tZPRLSHh5DR42HTc/35LA52BvjRMWYzrs4nf67gf652pgHh0tFMNMTMgZD 
rpTkyts9AgMBAAGjggEFMIIBATAdBgNVHQ4EFgQUG0cLBjouoJPM8dQzKUQCZYNY 
y8AwgdEGA1UdIwSByTCBxoAUG0cLBjouoJPM8dQzKUQCZYNYy8ChgaKkgZ8wgZwx 
CzAJBgNVBAYTAklOMQswCQYDVQQIEwJBUDEMMAoGA1UEBxMDSFlEMRkwFwYDVQQK 
ExBSb2Nrd2VsbCBjb2xsaW5zMRwwGgYDVQQLExNJbmRpYSBEZXNpZ24gQ2VudGVy 
MQ4wDAYDVQQDEwVJTUFDUzEpMCcGCSqGSIb3DQEJARYaYnJhamFuQFJvY2t3ZWxs 
Y29sbGlucy5jb22CCQCtCZg3P2F1rDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB 
BQUAA4IBAQCyYZxEzn7203no9TdhtKDWOFRwzYvY2kZppQ/EpzF+pzh8LdBOebr+ 
DLRXNh2NIFaEVV0brpQTI4eh6b5j7QyF2UmA6+44zmku9LzS9DQVKGLhIleB436K 
ARoWRqxlEK7TF3TauQfaalGH88ZWoDjqqEP/5oWeQ6pr/RChkCHkBSgq6FfGGSLd 
ktgFcF0S9U7Ybii/MD+tWMImK8EE3GGgs876yqX/DDhyfW8DfnNZyl35VF/80j/s 
0Lj3F7Po1zsaRbQlhOK5rzRVQA2qnsa4IcQBuYqBWiB6XojPgu9PpRSL7ure7sj6 
gRQT0OIU5vXzsmhjqKoZ+dBlh1FpSOX2 
-----END CERTIFICATE----- 

回答

10

X509結構轉化爲與PEM編碼的證書的串:

char *X509_to_PEM(X509 *cert) { 

    BIO *bio = NULL; 
    char *pem = NULL; 

    if (NULL == cert) { 
     return NULL; 
    } 

    bio = BIO_new(BIO_s_mem()); 
    if (NULL == bio) { 
     return NULL; 
    } 

    if (0 == PEM_write_bio_X509(bio, cert)) { 
     BIO_free(bio); 
     return NULL; 
    } 

    pem = (char *) malloc(bio->num_write + 1); 
    if (NULL == pem) { 
     BIO_free(bio); 
     return NULL;  
    } 

    memset(pem, 0, bio->num_write + 1); 
    BIO_read(bio, pem, bio->num_write); 
    BIO_free(bio); 
    return pem; 
} 

PEM編碼的證書的轉換到X509結構:

X509 *PEM_to_X509(char *pem) { 

    X509 *cert = NULL; 
    BIO *bio = NULL; 

    if (NULL == pem) { 
     return NULL; 
    } 

    bio = BIO_new_mem_buf(pem, strlen(pem)); 
    if (NULL == bio) { 
     return NULL; 
    } 

    cert = PEM_read_bio_X509(bio, NULL, NULL, NULL); 
    BIO_free(bio); 
    return cert; 
} 
+0

Is th是否在翻譯中丟失了任何信息?換句話說,我可以做X509 - > .pem - > X509,並且具有相同的結構嗎? – kmdent

+1

@kmdent沒有丟失。您可以使用PEM_read_bio_X509()函數將PEM編碼證書讀取到X509結構。 – jariq

相關問題