haku-maiのブログ

インフラエンジニアですが、アプリも作ります。

【OpenSSL(LibreSSL)】OpenSSL(LibreSSL)を利用して自己証明書の作成(pem形式)

f:id:n-guitar:20211013235036p:plain:w800

本記事で行うこと

  • 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とは

ja.wikipedia.org

秘密鍵の作成

  • RSA方式とし、鍵の保護はAES-128とします。
  • 鍵の長さは2048 bitで十分強固です。
  • パスフレーズを入れて作成
$ 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 = コモンネーム
$ 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

RFC 2818 - HTTP Over TLS 日本語訳

  • 以上、OpenSSL(LibreSSL)を利用して自己証明書の作成(pem形式)でした。
  • 次回以降rancher server、Ingressをこの自己証明書を使って構築しています。
  • またiPhoneにプロファイルも合わせてインストールしていきます。