プライベート認証局

MicroK8s

Kubernetes(Minikube)をいじくるようになってから、
CA (Certificate Authorities)は避けて通れなくなりました。
自己署名証明書、サーバ証明書をちゃんと作ります。

OpenSSLのバージョンを確認

ubuntu@master:~$ openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

OpenSSL 1.1.1f 31 Mar 2020でも良さげ。

サーバー証明書の有効期間(default_days)は、1年(365日)。

CA.pl

作成環境を整えてくれるツール。
ルート権限のインストール作業くらいに留めておきたいので、自分のホームディレクトリで作業できるようにします。

【ubuntuの場合】

ubuntu@master:~$ cp /usr/lib/ssl/misc/CA.pl ./

demoCAに一連の作業環境ができます。
設定ファイルは、/usr/lib/ssl/openssl.cnfを参照。
書き込みはルート権限が必要になるので、できるだけ参照のみで作業を完結させる。
安全安心のため、あらかじめバックアップを作成。

ubuntu@master:~$ sudo cp /usr/lib/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf.bak

環境作成

ubuntu@master:~$ ./CA.pl -newca

作成した環境を、ちゃらにしたければ、「rm -rf demoCA」でOK。

初回設定

Common Nameはホスト名にしておく。

入力要求があったら、この項目だけは入力。あとはリターンキー。

  • Country Name (2 letter code) [AU]:JP
  • State or Province Name (full name) [Some-State]:Tokyo
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:Personal business
  • Common Name (e.g. server FQDN or YOUR name) []:microk8s

秘密鍵

フォルダ「private」に作成済。ファイル名:cakey.pem。
パスフレーズ付き。

自己署名証明書

CSR(Certificate Signing Request) 証明書署名要求の作成

Organization Name(/O)は、環境設定/初回設定で設定したものとは異なる値。
Common Name(/CN)は、FQDN。

ubuntu@master:~$ openssl req -new -key ./demoCA/private/cakey.pem -out ./demoCA/certs/ca.csr -subj "/C=JP/ST=Tokyo/O=Sole proprietorship/CN=microk8s.local"

CRT(CeRTificate) 証明書作成

ubuntu@master:~$ openssl ca -in ./demoCA/certs/ca.csr -out ./demoCA/certs/ca.crt -selfsign -extensions v3_ca

Check that the request matches the signature
Signature ok
---
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

確認

ubuntu@master:~$ openssl x509 -text -in ./demoCA/certs/ca.crt --noout

サーバ証明書

ubuntu@master:~$ mkdir ./demoCA/server

秘密鍵

ubuntu@master:~$ cp ./demoCA/private/cakey.pem ./demoCA/server/server.key

CSR(Certificate Signing Request) 証明書署名要求の作成

Organization Name(/O)は、環境設定/初回設定で設定したものと同じ。
Common Name(/CN)は、FQDN。

ubuntu@master:~$ openssl req -new -key ./demoCA/server/server.key -out ./demoCA/server/server.csr -subj "/C=JP/ST=Tokyo/O=Personal business/CN=microk8s.local"

SAN(Subject Alternative Name)

ubuntu@master:~$ nano ./demoCA/server/subjectnames.txt
subjectAltName = DNS:microk8s.local

ホスト名を書く場合は「DNS」で、IPアドレスで書く場合は「IP」で指定します。ワイルドカード(*)も使用可能です。
(例)
subjectAltName = DNS:test.com, DNS:www.test.com,DNS:*.example.com,IP:192.168.1.10

CRT(CeRTificate) 証明書作成

ubuntu@master:~$ openssl ca -in  ./demoCA/server/server.csr -out  ./demoCA/server/server.crt -days 365 -extfile ./demoCA/server/subjectnames.txt

Check that the request matches the signature
Signature ok
---
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

確認

ubuntu@master:~$ openssl x509 -text -in ./demoCA/server/server.crt --noout

「X509v3 Subject Alternative Name」に、指定したsubjectAltNameが含まれるようになります。

X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:microk8s.local

鍵の保存

ubuntu@master:~$ cd $HOME
ubuntu@master:~$ mkdir -p .CA
ubuntu@master:~$ cp ./demoCA/private/cakey.pem .CA/ca.key
ubuntu@master:~$ cp ./demoCA/certs/ca.crt .CA/
ubuntu@master:~$ cp ./demoCA/server/server.key .CA/ 
ubuntu@master:~$ cp ./demoCA/server/server.crt .CA/

秘密鍵 パスフレーズ解除

ubuntu@master:~$ openssl rsa -in .CA/ca.key -out .CA/ca.key
ubuntu@master:~$ openssl rsa -in .CA/server.key -out .CA/server.key

作業環境 削除

ubuntu@master:~$ rm -rf demoCA
タイトルとURLをコピーしました