2016-07-26 222 views

回答

2

在OpenSSL中似乎沒有任何可用的幫助函數來執行此操作。它看起來像實現你想要的唯一方法是解析字符串並逐個構建元素。你可以使用strsep的是,造成這樣的代碼(沒有做任何錯誤檢查和容易出錯關於變化的名稱格式):

#define TEST_NAME "CN=CA1, O=DEVANG" 

X509_NAME *x509name = X509_NAME_new(); 
char *x509nameString = strdup(TEST_NAME); 
char *toFree = x509nameString; 
char *x509nameEntryString = strsep(&x509nameString, ","); 
char *x509nameEntryTypeString; 
char *x509nameEntryValueString; 

while (NULL != x509nameEntryString) { 
    x509nameEntryValueString = x509nameEntryString; 
    x509nameEntryTypeString = strsep(&x509nameEntryValueString, "="); 
    X509_NAME_add_entry_by_txt(x509name, x509nameEntryTypeString, 
     MBSTRING_ASC, x509nameEntryValueString, -1, -1, 0); 
    /* Need to skip spaces */ 
    while ((NULL != x509nameString) && 
     (' ' == *x509nameString)) { 
    x509nameString = &x509nameString[1]; 
    } 
    x509nameEntryString = strsep(&x509nameString, ","); 
} 

/* See the result, just FYI */ 
X509_NAME_print_ex_fp(stdout, x509name, 0, XN_FLAG_ONELINE); 

free(toFree); 

用於比較兩個X509_NAME情況下,該功能X509_NAME_cmp()可用。

我確實希望有人有更好的答案...