CentOS Stream 9のCockpitで、Let’s EncryptのSSL証明書を利用する

CockpitでSSL証明書が利用できない。「gnutls_handshake failed: A TLS fatal alert has been received.」のエラー

以前のCentOS Stream 9では、SSL証明書とプライベートキーをマージしたファイルを利用してSSL証明書として利用していました。数ヶ月前からCockpitのWEB画面にアクセスすると、証明書のエラーが表示されSSL接続ができなくなっていました

ログを確認すると下記のように、「gnutls_handshake failed: A TLS fatal alert has been received.」とエラーが表示されています

$ sudo journalctl -u cockpit
Aug 07 14:12:53 example.com cockpit-tls[8581]: cockpit-tls: gnutls_handshake failed: A TLS fatal alert has been received.

Cockpitで利用しているSSL証明書を確認する

Cockpitでは、どの証明書を利用するか確認すると、「merged certificate and key files are unsupported. Please use a separate .cert and .key file.」とエラーが上がっています。マージされた証明書とプライベートキーはサポート外となっているので、ファイルをマージするのは駄目になったようです

$ sudo /usr/libexec/cockpit-certificate-ensure --check
cockpit-certificate-ensure: /etc/cockpit/ws-certs.d/ssl.cert: merged certificate and key files are unsupported. Please use a separate .cert and .key file.

Cockpitの証明書のディレクトリを確認すると以下となっており、「0-self-signed-ca.pem」,「0-self-signed.cert」,「0-self-signed.key」のファイルに生成されていました

$ ls -l /etc/cockpit/ws-certs.d/
total 12
-rw-r--r-- 1 root root 3578 Aug  7 14:25 0-self-signed-ca.pem
-rw-r--r-- 1 root root 1777 Aug  7 14:24 0-self-signed.cert
-rw------- 1 root root 1704 Aug  7 14:25 0-self-signed.key
-rw------- 1 root root 1704 Jul  7 16:35 ssl.cert

上記の新しい「0-self-signed-ca.pem」,「0-self-signed.cert」,「0-self-signed.key」は以下のような証明書ファイルとなっています

  • 0-self-signed-ca.pem
    • 種類: 自己署名CA証明書
    • 説明: これは自己署名証明書(Self-Signed Certificate)のCA(Certificate Authority)証明書ファイルです。CA証明書は、他の証明書を発行するための基盤として機能します。このファイルには、証明書の発行元の公開鍵情報が含まれています。
  • 0-self-signed.cert
    • 種類: SSL証明書
    • 説明: これはCockpitが使用するSSL証明書ファイルです。この証明書は自己署名されています。通常、Webサーバーやサービスがクライアントとの通信を暗号化するために使用されます。このファイルには、公開鍵情報が含まれています。
  • 0-self-signed.key
    • 種類: プライベートキー
    • 説明: これはSSL証明書に対応するプライベートキーファイルです。プライベートキーは、証明書と対になる秘密鍵であり、暗号化通信を行う際に使用されます。このファイルは厳重に保護されるべきです。

上記をの証明書を、Let’s EncryptのSSL証明書の内容に上書きします。Let’s Encryptで利用する各SSL証明書は以下となります

$ sudo ls /etc/letsencrypt/live/example.com
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

上書きするファイルの種類と詳細は以下となります。

  • cert.pem
    • 種類: SSL証明書
    • 説明: これはドメインに対して発行された公開鍵証明書です。Cockpitでは 0-self-signed.cert の代わりに使用します。
  • chain.pem
    • 種類: 中間証明書
    • 説明: これはSSL証明書チェーンの中間証明書です。ブラウザがサーバー証明書を信頼できるようにするためのものです。Cockpitで使用する場合、このファイルは必要ありませんが、fullchain.pem に含まれているため特に別途設定する必要はありません。
  • fullchain.pem
    • 種類: 完全な証明書チェーン
    • 説明: これはドメイン証明書と中間証明書が含まれたファイルです。Cockpitでは 0-self-signed-ca.pem の代わりに使用します。
  • privkey.pem
    • 種類: プライベートキー
    • 説明: これはドメイン証明書に対応するプライベートキーです。Cockpitでは 0-self-signed.key の代わりに使用します。

Let’s Encryptで利用するSSL証明書をCockpitのSSL証明書として利用する設定

具体的には、「cert.pem」を「0-self-signed.cert」に、「privkey.pem」を「0-self-signed.key」に、「fullchain.pem」を「0-self-signed-ca.pem」に上書きします

$ sudo cat /etc/letsencrypt/live/example.com/fullchain.pem > /etc/cockpit/ws-certs.d/0-self-signed-ca.pem
$ sudo cat /etc/letsencrypt/live/example.com/cert.pem > /etc/cockpit/ws-certs.d/0-self-signed.cert
$ sudo cat /etc/letsencrypt/live/example.com/privkey.pem > /etc/cockpit/ws-certs.d/0-self-signed.key

プライベートキーファイルの権限を設定します。

$ sudo chmod 600 /etc/cockpit/ws-certs.d/0-self-signed.key
$ sudo chown root:root /etc/cockpit/ws-certs.d/0-self-signed.key

Cockpitを再起動して、新しい証明書を反映させます。

$ sudo systemctl restart cockpit

 

LinuxCentOS Stream 9

Posted by admin