記憶にないほどご無沙汰の銭湯に行ってきた。

我が家の外付けの湯沸かし器が突然故障して、新しい湯沸かし器の取り付けが来週初めなので、その間は銭湯に行くことになった。

銭湯は歩いて7~8分のところ、夕方4時からと言うことなので家を5分前に出かけて、フロント式になってるところで1回460円を支払い男湯へ。まだ2~3人だけなのでゆったりした感じで、お風呂には「バイブラ」があったり、シャワーが取り付けてあったり、別料金らしいけど「サウナ」もあったり、とにかく記憶にないほど昔の経験なので物珍しさもあって、時間をかけてお風呂に入っていたから少しのぼせた感じかな?帰りは千鳥足で帰ってきた。

プライベート認証局(CA)でSANs対応のサーバー証明書、クライアント証明書の作成

xampp\apache\conf のopenssl.cnfを x:\openssl-Win32\bin (ここがデフォルト) にコピーして,以下のようにカスタマイズする。
【準備】
1.システム・環境変数の「openssl.cfg」の拡張子を「cnf」に変更。
2.ドライブ(x:/)上に作業用フォルダーを作成。
3.OpenSSL\bin\openssl.cnfのチェック、修正、追記。

[openssl.cnf]
・dir=./demoCA—>dir=(drive xx):\xxxx ➡ 絶対パス
*作業用フォルダーへの絶対パス 例)etc,work
・default_days = 365 ➡ default_days = 1095(3年)
・default_md = default ➡ default_md = sha256
・# req_extensions = v3_req ➡ req_extensions = v3_req

|| [ v3_req ] のエリア|| ➡ 下記を追記
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = xxx.example.com ➡ CN (Common Name)
DNS.2 = *.example.com ➡ A records
*ドメインを DNS.1, DNS.2, DNS.3, … のように追加できる。

||Client証明書|| ➡「openssl.cnf」の最後に以下を追記
[ ssl_client ]
basicConstraints = CA:FALSE
nsCertType = client
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
nsComment = “OpenSSL Certificate for SSL Client”

[新証明書のサブジェクト]

・pass phrase: xxxxxxxxx ➡ 全て同じ
・Country Name: JP
・State or Province Name: Tokyo
・Locality Name: Meguro-ku
・Organization Name: xxxxx ➡ 例)ドメイン名も可
・Organizational Unit Name: xxxxx ➡(*)
・Common Name: xxxxxx ➡ 例)PrivateCA
・Email Address: xxxxx@xxxxxx.xxx ➡(*)
(*)CAで省略、Server証明書&Client証明書で記入

認証局(CA)の作成】

1. x:/にxxxxフォルダを作る。
2. フォルダー内に「private」と「newcerts」、index.txtを作る。
3. コマンドプロンプト(管理者権限)で実行。
cd x:\xxxx
echo 01 > serial
openssl req -new -keyout private\cakey.pem -out careq.pem
openssl ca -selfsign -in careq.pem -extensions v3_ca -out cacert.pem
copy cacert.pem x:\xampp\apache\conf
copy cacert.pem my_ca.crt


Server 証明書の作成

1. cd x:\xxxx
openssl genrsa -out xxxxxx.key 2048
openssl req -new -out xxxxxx.csr -key xxxxxx.key
2. 次のコマンドで CSR 内の SANs を確認する。(Subject Alternative Name?)
openssl req -text -noout -in xxxxxx.csr
3. openssl ca -in xxxxxx.csr -out xxxxxx.crt -extensions v3_req
copy xxxxxx.key cp_xxxxxx.key
openssl rsa <cp_xxxxxx.key> xxxxxx.key ➡ 必要(?)
(?)Win32は「SSLPassPhraseDialog builtin」 をサポートしていないので, server.key の pass phrase を復号しておかないと, Apache の起動時にエラーが出る。
*xxxxxxのkey/csr/crt は同じ名 例)server.key/csr/crt
[Apache用]
copy xxxxxx.key x:\xampp\apache\conf\ssl.key
copy xxxxxx.crt x:\xampp\apache\conf\ssl.crt

Client 証明書の作成

1. cd x:\xxxx
openssl req -new -keyout client.key -out client.csr
openssl ca -policy policy_anything -extensions ssl_client -in client.csr -out client.crt
openssl pkcs12 -export -in client.crt -inkey client.key -out clientcert.p12


メモ)度々のOpenSSLで証明書発行してルート機関等へ登録・削除すると、「https」 が有効になっているにも関わらず、「鍵が見つからない」と言った下記のようなエラーが発生するのでapacheが起動できなくなる。
SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
対処法として、一旦「https」に関する全ての設定を無効にした後、PCを再起動してHTTPで起動できることを確認。次に新たに証明書(CA)を登録、HTTPSの設定を終えてからApacheの再起動。
OSBLOG_OSSHINET(当サイト)では、Letsencryptのクライアント証明書のHTTPSなので、MailとFTPサーバーに設定して確認したところ問題なく暗号化してる。

PS. SANs対応の各証明書作成「TEST」で成功した際の写真。