【OpenSSL(LibreSSL)】OpenSSL(LibreSSL)を利用して自己証明書の作成(pem形式)
本記事で行うこと
- OpenSSLで自己証明書の作成し、pem形式それぞれ行う。
モチベーション
- いつも忘れるので自分のメモ用に記録しておきたかったため。
- 自宅kubernetes上のdocker registry、Ingressに設定するサーバ証明書を作成したかったため。
- 自宅rancher server用に設定するサーバ証明書を作成したかったため。
環境
証明書を作成する環境 * M1 Macbook Air
$ sw_vers ProductName: macOS ProductVersion: 11.1 BuildVersion: 20C69 $ uname -m arm64 $ openssl version LibreSSL 2.8.3
※LibreSSLとは
秘密鍵の作成
$ openssl genrsa -aes128 -out encrypted.key.pem 2048 $ ls -l ./encrypted.key.pem -rw-r--r-- 1 haku-mai staff 1766 10 12 21:49 ./encrypted.key.pem
暗号化されない鍵ファイル作成
- serverに配置する用のものです。
$ openssl rsa -in encrypted.key.pem -out key.pem
証明書署名要求(CSR)の作成
- 以下の項目を
-subj
にセットして作成します。
C = 2文字の国名 ST = 都道府県 L = 地域 O = 組織名 OU = 組織単位名 CN = コモンネーム
- コモンネームはワイルドカードで利用したいので
*.hkm.home
とします。
$ openssl req -new -key key.pem -out csr.pem -subj "/C=JP/ST=Tokyo/L=chiyodaku/O=haku-mai/CN=*.hkm.home" Enter pass phrase for key.pem: $ ls -l ./csr.pem -rw-r--r-- 1 haku-mai staff 985 10 12 22:05 ./csr.pem
自己署名証明書作成
- 今回は複数ドメインの証明書を作成したいのでSAN(Subject Alternative Name)を作成し、自己証明書を作成します。
$ echo "subjectAltName = DNS:rancher.hkm.home, DNS:*.hkm.home" > san.txt $ openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem -extfile san.txt Signature ok subject=/C=JP/ST=Tokyo/L=chiyodaku/O=haku-mai/CN=*.hkm.home Getting Private key Enter pass phrase for key.pem:
- 以上となります。
中間証明書は自宅環境では不要とします。
ちなみにRFC 2818でSANがないとエラーになります。実際以前docker registryにSANなしで作成した自己証明書を使い、kubernetesのpod内からプログラムでアクセスしたところ以下のようなエラーが出てアクセスできませんでした。
Error: creating registry client failed: Get "https://docker-registry.svc.cluster.local/v2/": x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0