1

私の仕事は、TLS 証明書から「共通名」情報を取得することです。私はTLSの「証明書」(「こんにちはサーバー」の後に来る)メッセージを解析し、証明書へのポインタを取得してX509_NAME_get_text_by_NIDに渡すことでそれを行うことができます。

p = certificate;//this is a pointer to certificate 
X509 *x;
x = d2i_X509(NULL, &p, certificate_lenght);

if (x == NULL)
{
    fout << " X509 object is null " << std::endl;
    return;
}
fout << " no x509  error " << endl;
X509_NAME_get_text_by_NID(X509_get_subject_name(x),NID_commonName, peer_CN, 256);

私は正しいことをしていると思います。

「DER」形式のロジックを設計する私の質問は、この情報を「PEM」形式で提供できますか。はいの場合、証明書が PEM 形式か DER 形式かをどのように理解できますか?

4

1 に答える 1

2

TLS ハンドシェイク中に送信される証明書は、DER では常にバイナリ データです。そこでは PEM を気にする必要はありません。

同じコードを使用して他のソースから証明書をロードする場合は、それが純粋なテキスト (つまり、32 ~ 127 の範囲の文字のみ) であるかどうかを分析する必要があります。そうであれば、ほとんどの場合、何か PEM があります。ただし、証明書を取得したという保証はありません。ヘッダーとフッターが存在する場合はそれらを削除し、残りを base64 でデコードして DER を取得する必要があります。その後、DER をデコードできます。

于 2013-03-29T12:25:09.567 に答える