openssl コマンドを使って オレオレ認証局を作成してサーバ証明書を発行する

openssl コマンドを使って オレオレ証明書を作成する
の続きです

認証局

認証局 (CA:Certification Authority)とは、デジタル証明書を発行する機関である。

wikipedia 認証局
https://ja.wikipedia.org/wiki/%E8%AA%8D%E8%A8%BC%E5%B1%80

証明書の発行は有償です。 無償のところもある。

Digicert スタンダード・サーバID の場合 年間 5万5千円
https://www.digicert.com/jp/standard-ssl-certificates/

Lets Encrypt (無償)
https://letsencrypt.org/ja/

オレオレ認証局

オレオレ認証局とは、開発用途で作成する私設の認証局である。

開発用途のために、正規の認証局 から証明書を発行して貰うのは、費用も手間もかかる。

自前で認証局を作成し、気軽に証明書を発行する。

前回のオレオレ証明書では、ウェブブラウザにて警告が表示される。

今回は、警告なしで表示する証明書を目指す。 ルート認証局と中間認証局を作成する。 中間認証局サーバ証明書を発行する。

下記を参考にした。

ルート認証局を作成する

下記を参考にした。
macOS security command
https://ss64.com/osx/security.html

(1) 認証局用のディレクトリを作成する

demoCAというディレクトリは openssl.cnf で設定されている。

% cd work # 任意のディレクトリに移動する
% mkdir demoCA/
% mkdir demoCA/private/
% mkdir demoCA/newcerts/
% touch demoCA/index.txt
% echo 00 > demoCA/serial

(2) 認証局秘密鍵を作る

% /openssl genrsa -aes256 -out cakey.pem 2048

(3) 認証局の署名要求 (CSR: Certificate Signing Request) を作る

% openssl req -new -key cakey.pem -out cacert.csr

(5) CSR を確認する

% openssl req -noout -text -in cacert.csr

(4) 自己署名する

% openssl x509 -req -in cacert.csr -signkey cakey.pem -out cacert.pem -days 365

(5) 証明書の内容を確認する

% openssl x509 -text -noout -in cacert.pem

(6) 認証局秘密鍵と証明書をワークエリアから認証局用のディレクトリにコピーする

% cp cakey.pem demoCA/private/ % cp cacert.pem demoCA/

(7) macOSの場合、キーチェーンに登録する

% sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" cacert.pem

中間認証局を作成する

下記を参考にした。

(1) 中間認証局(Intermediate CA) の設定ファイル ca_inter.cnf を作成する

openssl.cnf をコピーする 「demoCA」を「interCA」(任意の名前でよい) に変更する

(2) 中間認証局用のディレクトリを作成する

% cd work # 任意のディレクトリに移動する
% mkdir interCA/
% mkdir interCA/private/
% mkdir interCA/newcerts/
% touch interCA/index.txt
% echo 00 > interCA/serial

(3) 中間認証局秘密鍵を作る

% openssl genrsa -aes256 -out inter_key.pem 2048

(4) 中間認証局CSR を作る

% openssl req -new -key inter_key.pem -out inter.csr

(5) CSR を確認する

% openssl req -noout -text -in inter.csr

(6) ルート認証局が中間認証局を署名するための拡張設定ファイル sign.cnf を作る

[ v3_ca ]
basicConstraints = CA:true, pathlen:0
keyUsage = cRLSign, keyCertSign
nsCertType = sslCA, emailCA

(7) ルート認証局が中間認証局CSRに署名する

% openssl x509 -req -extfile sign.cnf -in inter.csr -out inter_cert.pem -extensions v3_ca -days 365

(8) 証明書の目的確認する

% openssl x509 -purpose -in inter_cert.pem -noout

下記が表示されれば OK

SSL server CA : Yes

(9) 中間認証局秘密鍵と証明書をワークエリアから認証局用のディレクトリにコピーする

% cp inter_key.pem interCA/private/ % cp inter_cert.pem interCA/

サーバ証明書を作成する

下記を参考にした。
Apple、9月1日からサーバ証明書の最大有効期間を13カ月に制限
https://www.itmedia.co.jp/news/articles/2002/25/ news057.html

(1) サーバ証明書秘密鍵を作る

% openssl genrsa -aes256 -out server_key.pem 2048

(2) サーバ証明書秘密鍵からパスフレーズを削除する

サーバを起動するときに 秘密鍵パスフレーズを要求される場合がある。   自動的に起動するように パスフレーズなしの秘密鍵を使用する。

% rsa -in taro_key.pem -out server_nopass_key.pem

(3) サーバ証明書CSR を作る

% openssl req -new -key server_nopass_key.pem -out server.csr

コモンネーム は、サーバー名を入力する FQDNが望ましい ローカルネットの場合は /etc/hosts に合わせる 「localhost」も可

(8) 中間認証局CSR に署名する

% openssl ca -in server.csr -out server_cert.pem -days 397

有効期限は最大で397日

(9) 証明書の内容を確認する

% openssl x509 -text -noout -in server_cert.pem

注意 Chrome の場合は、この証明書ではエラーになる。

下記を参照のこと。
openssl コマンドを使って SANを設定したサーバ証明書を発行する
ken-ohwada.hatenadiary.org