TSL証明書にローカルにアクセスする方法

TSL証明書にローカルにアクセスする方法

Apache サーバーで使用される有効な LetsEncrypt 証明書があります。

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName mydomain.com
        SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
    </VirtualHost>
</IfModule>

証明書は certbot を使用して自動的に更新されます。

sudo ls /etc/letsencrypt/mydomain.com/live/ -al

lrwxrwxrwx 1 root root   41 Dec 31 08:46 fullchain.pem -> ../../archive/mydomain.com/fullchain8.pem
lrwxrwxrwx 1 root root   39 Dec 31 08:46 privkey.pem -> ../../archive/mydomain.com/privkey8.pem

Apacheはwww-dataユーザーアカウントで実行されます。

www-data  6452  0.0  0.4 472056 41852 ?        S    01:44   0:11 /usr/sbin/apache2 -k start

また、この証明書を使用する必要があるWebソケットサーバーもあります。 www-data ユーザーを使用して Web ソケットサーバーを実行すると、次のエラーが発生します。

RuntimeException: TLS ハンドシェイク中に tcp://127.0.0.1:46714 の接続に失敗しました。 TLSハンドシェイクを完了できません。 SSL_R_NO_SHARED_CIPHER:適切な共有パスワードを使用できません。これは、サーバーにSSL証明書(local_certコンテキストオプション)がないためです。

これは、デフォルトでは証明書にアクセスできないことを意味します。 fullchain8.pemファイルとprivkey8.pemファイルをwww-dataにアクセスできる別の場所にコピーすると、エラーが変わります(しかしこれは別の質問です)。

秘密鍵ファイルをwww-dataにアクセスできる場所にコピーすることはお勧めできません。Webソケットサーバーがroot権限で実行されたくありません。だから私の質問は証明書にどのようにアクセスしますか? Apacheはその道を知っているようです。

ベストアンサー1

これを実行すると、ps auxw | grep httpdほとんどのApache Webサーバープロセスはwww-dataに属していますが、ルートに属するプロセスも1つあることがわかります。これは何よりも、基本プロセスが起動時に証明書を読む場所です。

また、/etc/letsencrypt/live ディレクトリを見ると、ファイルが実際に存在する場所への 1 つ以上の同期リンクを見つけることができます。このような複雑さが存在する理由があります。そして、あなたはそこから状況を変えたくありません。あなたはcertbotを破りたくありません。

Webサーバーについてたくさん教えてくれましたが、Webソケットサーバーについては何も教えてくれませんでした。この問題を回避するためのいくつかのメカニズムがあります。

/etc/letsencrypt/live/mydomain.com/の証明書とキーを別の権限を持つ別の場所にコピーする(そしてWebsocket証明書を再起動するか、証明書を再ロードするように指示する)certbot設定に展開フックスクリプトを追加するできます。これは、証明書が最初に生成されたときにcertbotコマンドラインで指定するか、後で/etc/letsencrypt/renewal/mydomain.com.confに手動で追加できます。

自分でやったことはありませんが、そのような気がします...

deploy-hook = /usr/local/sbin/updatewebscoketserver

[renewalparams]ファイルの末尾の対応するセクションの下にあります。

(スクリプトは直接作成することもできます。)

Webサーバーと同じuidでWebソケットサーバーを実行する必要がありますか?

おすすめ記事