2016-07-26 4 views
2

CA証明書の件名はCN=CA1, O=DEVANGです。 X509_NAME形式に変換したいです。件名のx509_name形式への変換

変換に役立つAPIはありますか? どのように比較できますか?

+0

あなたの質問には次の回答がありますか? –

答えて

2

これを行うためにOpenSSLで利用できるヘルパー関数はないようです。あなたが望むものを達成する唯一の方法は、文字列を解析してX509_NAME_ENTRY要素を1つずつ構築することです。あなたは(任意のエラーチェックを行い、名前の形式の変化に関連してエラーが発生しやすくなりません)。このコードのようなもので、その結果、そのための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); 

2つのX509_NAMEのインスタンスを比較するために、機能をX509_NAME_cmp()が利用可能です。

私は誰かがより良い答えを期待しています...

関連する問題