プライベート認証局

プライベート認証局

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非対応の認証局証明書を使った場合

出来た!

Chromeの場合
Edgeの場合
Firefoxの場合(但し、SAN非対応の認証局証明書を使用)
タイトルとURLをコピーしました