C言語にて ソケット関数と openssl ライブラリを使って HTTPSサーバを作成する
の続きです
証明書チェーン
証明書チェーンとは、サーバの認証に使用される証明書のリストです。 このチェーンは、サーバ証明書から始まり、 サーバ証明書を署名した中間局の証明書と続き、 中間局を署名したルート CA証明書で終了します。
参考 IBM 証明書チェーンの働き
https://www.ibm.com/support/knowledgecenter/ja/SSFKSJ_9.0.0/com.ibm.mq.sec.doc/q009880_.htm
証明書チェーンに必要な証明書の作成は、 下記を参照ください。
openssl コマンドを使って オレオレ認証局を作成してサーバ証明書を発行する
https://ken-ohwada.hatenadiary.org/entry/2021/02/27/122111
証明書チェーンを備えた HTTPS サーバを作成する
証明書チェーンを構成するには、 SSL_CTX_add_extra_chain_cert 関数を使用する
SSL_CTX_add_extra_chain_cert
https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_add_extra_chain_cert.html
下記のようなコードになる。
// 中間局が署名したサーバ証明書を設定する SSL_CTX_use_certificate_file( ctx, file_server_cert, SSL_FILETYPE_PEM ); // サーバ証明書の秘密鍵を設定する SSL_CTX_use_PrivateKey_file (ctx, file_server_key, SSL_FILETYPE_PEM ); /// 中間局の証明書を設定する X509* x509_1 = read_x509_from_pem( file_inter_cert ); SSL_CTX_add_extra_chain_cert( ctx, x509_1 ); // ルート認証局の証明書を設定する X509* x509_2 = read_x509_from_pem( file_root_cert ); SSL_CTX_add_extra_chain_cert( ctx, x509_2 ); // PEM形式のファイルから X509証明書を読み込む X509* read_x509_from_pem(char *file) { BIO *certbio = NULL; X509 *x509= NULL; certbio = BIO_new( BIO_s_file() ); BIO_read_filename( certbio, file ); x509 = PEM_read_bio_X509( certbio, NULL, 0, NULL ); return x509; }
証明書チェーンを確認する
上記のコードを実行する。
openssl s_client コマンドで確認すると、下記のように表示される
% openssl s_client -connect localhost:8083 -showcerts
depth=2 CN = hoge CA
verify return:1
depth=1 CN hoge inter CA
verify return:1
depth=0 CN = localhost
verify return:1
ウェブブラウザで表示する
下記を参照ください。
ウェブブラウザでオレオレ認証局で作成したサーバ証明書のサイトを閲覧する
https://ken-ohwada.hatenadiary.org/entry/2021/02/28/112511
うまくいくと下記のように表示される。
Github にコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/openssl/https