オレオレ認証局の作成
はじめに
OpenSSLオレオレ認証局(自己認証局)を構築して署名などの作業をしたので残しておきます。
前提環境
OS:Red Hat Enterprise Linux 8.6 (Ootpa)
OpenSSLインストール手順
OpenSSLのインストール手順は下記コマンドです。
# RHE
# dnf -y install openssl
# Ubuntu
$ sudo apt -y install openssl
インストールしたopensslのバージョンはopenssl version
コマンドで確認できます。
# openssl version
OpenSSL 1.1.1k FIPS 25 Mar 2021
本記事の環境は2023年の7月頃に準備したのが関係しているのか、1.1.1になっています。
リリースに関する最新情報はOpenSSL Release Strategyにあります。
自己認証局の作成
前準備
OpenSSLがインストールされていない場合は、上記手順でインストールします。
次に使用するディレクトリを作成します。
# mkdir -p /etc/pki/CA/private
# cd /etc/pki/CA
認証局の秘密鍵の作成
秘密鍵にパスフレーズをつける場合は暗号化アルゴリズムを指定します。本手順では-aes256
を指定しています。
パスフレーズを聞かれるので入力します。
# openssl genrsa -out ./private/cakey.pem -aes256 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
.........................................++++
................................................................................................++++
e is 65537 (0x010001)
Enter pass phrase for ./private/cakey.pem:
Verifying - Enter pass phrase for ./private/cakey.pem:
作成した秘密鍵の情報を表示するには下記コマンドで表示できます。
# openssl rsa -text -noout -in ./private/cakey.pem
認証局のCSR(証明書署名要求)の作成
下記コマンドでCSRを作成します。コマンドを実行するとパスフレーズを聞かれるので入力します。
# openssl req -new -key /etc/pki/CA/private/cakey.pem -subj "/C=JP/ST=Tokyo/L=Chuo-ku/O=MyRoot/OU=Ca/CN=My Root CA" -out /etc/pki/CA/cacert.csr
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
作成したCSRは秘密鍵の時と同じように表示できます。req
であることに注意してください。
# openssl req -text -noout -in /etc/pki/CA/cacert.csr
認証局のサーバ証明書の作成
下記コマンドで先ほど作成したCSRに署名し、サーバ証明書を作成します。
このコマンドでもパスフレーズを聞かれるので入力します。
# openssl x509 -days 1825 -in /etc/pki/CA/cacert.csr -req -signkey /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem
Signature ok
subject=C = JP, ST = Tokyo, L = Chuo-ku, O = MyRoot, OU = Ca, CN = My Root CA
Getting Private key
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
上記コマンドで作成されたサーバ証明書の内容は下記コマンドで表示できます。
# openssl x509 -in /etc/pki/CA/cacert.pem
その他
ほかに必要なディレクトリなどを作成します。
# mkdir /etc/pki/CA/newcerts
# touch /etc/pki/CA/index.txt
# echo 00 > /etc/pki/CA/serial
今までに作成したフォルダ構成は/etc/pki/tls/openssl.cnf
設定ファイル内の設定値と合うように作成しています。
dir = /etc/pki/CA
private_key = $dir/private/cakey.pem
certificate = $dir/cacert.pem
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
CSRへの署名
他サーバーから受け取ったCSRへは下記のコマンドで署名をします。
最近のブラウザではCNではなく、SANの設定値を参照するので、san.txtで設定するようにします。
# echo "subjectAltName = DNS:test.co.jp" > san.txt
# openssl ca -extfile san.txt -in <input file> -policy policy_anything -out <output file>
その他
opensslコマンドではbase64エンコードや暗号化なども可能なので、今後更新していきたいと思います。
Discussion