C++ コードから subjectAltName を使用して自己署名リクエストを作成しようとしています (このような動的な自己署名証明書 を実際のバージョンの OpenResty に実装しようとしていますが、subjectAltName の解決策はありません)。
C++/OpenSSL コードから SAN を設定する例をいくつか挙げてください。私はこのようなものを試しています:
X509_EXTENSION *ext;
STACK_OF (X509_EXTENSION) * extlist;
char *ext_name = "subjectAltName";
char *ext_value = "DNS:lohsport.com";
extlist = sk_X509_EXTENSION_new_null ();
ext = X509V3_EXT_conf (NULL, NULL, ext_name, ext_value);
if(ext == NULL)
{
*err = "Error creating subjectAltName extension";
goto failed;
}
sk_X509_EXTENSION_push (extlist, ext);
if (!X509_REQ_add_extensions (x509_req, extlist)){
*err = "Error adding subjectAltName to the request";
goto failed;
}
sk_X509_EXTENSION_pop_free (extlist, X509_EXTENSION_free);
コンパイルは成功していますが、動作しません。どんな助けにも感謝します。
更新 今、私は OpenSSL ライブラリの selfsing.c デモのように動作しようとしています:
1) CSR に拡張機能を追加する関数を定義しました。
int add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, char *value)
{
X509_EXTENSION *ex;
ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value);
if (!ex)
return 0;
sk_X509_EXTENSION_push(sk, ex);
return 1;
}
2) CSR を生成する関数にこのブロックを追加します。
char Buffer[512];
// Format the value
sprintf (Buffer, "DNS:%s", info->common_name);
xts = sk_X509_EXTENSION_new_null();
add_ext(exts, NID_subject_alt_name, Buffer);
if(X509_REQ_add_extensions(x509_req, exts) != 1) {
*err = "X509_REQ_add_extensions() failed";
goto failed;
}
sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
コードは再び正しくコンパイルされ、証明書はその場で生成されますが、代替名はまだ機能せず、ブラウザーにエラーが表示されます。
ネット :: ERR_CERT_COMMON_NAME_INVALID
証明書の詳細に別名情報が表示されません。
SAN の問題に対して他にどのような解決策がありますか? 役立つ場合は、たとえば github ですべてのコードを提供できます。