プライベート認証局
Rocky Linuxの認証局構築ツールを使います。
Google Chromeですが、バージョン58からSAN(Subject Alternative Name)を含む証明書を作らないと、「ERR_SSL_SERVER_CERT_BAD_FORMAT」と怒られてしまって、接続できません。
因みに、SAN対応にすると、Firefoxと接続できません。
SAN非対応の認証局証明書なら動作します。
OpenSSLのバージョンを確認
1.1.1より、コマンドライン上でalternative属性が簡単に追加できるようになりました。
# openssl version
OpenSSL 3.0.1 14 Dec 2021 (Library: OpenSSL 3.0.1 14 Dec 2021)
【前提条件】opensslのバージョンが1.1.1以降。
プライベート認証局で発行するサーバー証明書の有効期間(default_days)は、デフォルトで1年(365日)に設定します。
更新の手間がありますので、サーバー証明書の有効期限は長めに設定したいところですが、サーバー証明書の有効期間の上限を約1年とする動きがあります。実際に Apple の Safari は 2020年9月より有効期間を最大でも13ヶ月にすると発表していますので、サーバー証明書の有効期間は1年としておいた方がいいかも。
参考資料:信頼済み証明書に関する今後の制限について | Appleサポート
秘密鍵の作成
# cd
# openssl genrsa -out server.key 4096
CSRの作成(Chome、Edge、Firefox対応)
# openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:localserver.local
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
証明書への署名(Chome、Edge、Firefox対応)
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
確認
# openssl x509 -text -in server.crt --noout
SAN(Chome、Edge対応)
# nano subjectnames.txt
subjectAltName = DNS:wordpress.local,DNS:gitea.local
ホスト名を書く場合は「DNS」で、IPアドレスで書く場合は「IP」で指定します。ワイルドカード(*)も使用可能です。
(例)
subjectAltName = DNS:test.com, DNS:www.test.com,DNS:*.example.com,IP:192.168.1.10
サーバ証明書の作成
プライベート認証局なので、作成した秘密鍵 (server.key) で署名してサーバ証明書を作成します。
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt -extfile subjectnames.txt
確認
# openssl x509 -text -in server.crt --noout
「X509v3 Subject Alternative Name」に、指定したsubjectAltNameが含まれるようになります。
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:wordpress.local, DNS:gitea.local
秘密鍵と発行したサーバー証明書を適切な場所に移動
# mv -i server.key /etc/pki/tls/private/
# mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
# chmod 600 /etc/pki/tls/private/server.key
# chmod 600 /etc/pki/tls/certs/server.crt
CSRを削除
# rm -f server.csr
プライベート認証局のルート証明書を手元のパソコンにコピー。
プライベート認証局のルート証明書「/etc/pki/tls/certs/server.crt」を手元のパソコンにコピーしておきます。
cp /etc/pki/tls/certs/server.crt /home/(ユーザディレクトリ)
winSCPでローカルPCにコピーする。
HTTPS(443/tcp)のポートを開ける
# firewall-cmd --permanent --add-service=https
# firewall-cmd --reload
ルート証明書のインストール
プライベート認証局のルート証明書をインストールします。
Chrome
右上のハンバーガーメニューから「設定」を選択します。






インポートする証明書ファイルをフルパスで設定します。ファイル名は「server.crt」です。「参照(R)…」ボタンをクリックすると探しやすい。


「ファイル名」に指定した証明書のファイル名が表示されます。



Edge
右上のハンバーガーメニューから「設定」を選択します。


後は、Chromeと同じ。
FireFox
SAN対応にすると認証局証明書の登録ができません。
右上のハンバーガーメニューから「オプション」を選択します。

プライバシーとセキュリティをクリックします。

画面の下の方にある「証明書を表示」をクリックします。
認証局証明書を選択し「インポート(M)…」をクリックします。
プライベート認証局のルート証明書「server.crt」を選択します。

SAN対応の認証局証明書を使った場合

暫定処置
危険を承知で続行をクリック。


SAN非対応の認証局証明書を使った場合

出来た!


