web-dev-qa-db-ja.com

Apache + OpenVPN共有ポートがLet's EncryptのCertbotと競合する

私は皆が見るためにいくつかのファイルをホストするApacheを持ち、HTTPSでそれを保護しました。 OpenVPNホストもあります。一部のネットワークは送信ポート(1194など)をブロックするため、OpenVPN内でport-share機能を使用して、OpenVPNを介してApacheにHTTPトラフィックをルーティングします。これを行うことで、ポート443でサイトをホストしながら、(ほぼ)常に開いているポート443でVPNに同時に接続できます。

ApacheはHTTPSポートをポート4443に変更するだけで、OpenVPNは443から4443に送信するトラフィックを独自に決定します。

ただし、私のApacheサーバーは、自動更新のためにLet's Encrypt証明書とCertbotを使用します。私が言えることから、このポート共有はいくつかの問題を引き起こしており、Certbotは適切に自動更新できません。ポート共有中に試行すると、このエラーが発生します。

Attempting to renew cert (maxattax.com) from /etc/letsencrypt/renewal/maxattax.com.conf produced an unexpected error: Failed authorization procedure. maxattax.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Error getting validation data, www.maxattax.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Error getting validation data. Skipping.

Apacheを4443ではなくポート443で実行するように構成を変更し、OpenVPNをオフにすると、Certbotは再び更新できます。

私の質問は、OpenVPNをポート443に、Apache HTTPSをポート443に維持し、Certbotが自動更新できるようにするにはどうすればよいですか?

/etc/openvpn/server.confの関連部分:

port 443
proto tcp
port-share localhost 4443

/etc/Apache2/ports.confの内容:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/Apache2/sites-enabled/000-default.conf

Listen 80

# Modified to port 4443 for OpenVPN passthrough
<IfModule ssl_module>
        Listen 4443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 4443
</IfModule>

/etc/Apache2/sites-enabled/000-default-le-ssl.confの内容:

<IfModule mod_ssl.c>
<VirtualHost *:4443>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual Host. For the default virtual Host (this file) this
        # value is not decisive as it is used as a last resort Host regardless.
        # However, you must set it for any further virtual Host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${Apache_LOG_DIR}/error.log
        CustomLog ${Apache_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual Host. For example the
        # following line enables the CGI configuration for this Host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

        #SSLCertificateFile /etc/letsencrypt/live/maxattax.com/fullchain.pem
        #SSLCertificateKeyFile /etc/letsencrypt/live/maxattax.com/privkey.pem

        SSLCertificateKeyFile /etc/letsencrypt/live/maxattax.com/privkey.pem
        SSLCertificateFile /etc/letsencrypt/live/maxattax.com/cert.pem
        SSLCertificateChainFile /etc/letsencrypt/live/maxattax.com/fullchain.pem
        Include /etc/letsencrypt/options-ssl-Apache.conf
        ServerName maxattax.com
        ServerAlias www.maxattax.com
</VirtualHost>
</IfModule>

PS:maxattax.comは私の実際のドメインではありません

2
Maxattax

英語版:

例としてmaxattax.comを見てみましょう。

  1. certbotコマンドライン:SSL証明書に適用するフラグを追加します

    Sudo certbot certonly --Apache --tls-sni-01-port 4443 --allow-subset-of-names --cert-name maxattax.com -d maxattax.com -d www.maxattax.com
    

    操作が正常に完了すると、certbot更新構成ファイルは、次回の自動更新に使用したオプションとフラグを保存します。

    /etc/letsencrypt/renewal/maxattax.com.conf
    
  2. 自動更新が正常に機能するかどうかを確認します。

    Sudo certbot renew --dry-run
    

失敗が表示されない場合、仕事は完了です!

注:

/etc/Apache2/ports.confがcertbotによって編集されているかどうかを確認します。

Certbotによって重複した「Listen」コマンドが追加されたため、私のWebサイトでSSLエラーが発生しました。

中文版:域名:maxattax.comの例。

完了:Apacheが独自のエンドポイント(443以外のエンドポイント)を使用している場合、certbotは成功しました。

状況:openvpn监听443の端口で、Apacheに443の端の口を分けて、Apache443 4443の端口の場合は、certbotの自動更新のドキュメントを報告します。

手順:1.新しいコマンド実行申請書を使用する

    Sudo certbot certonly --Apache --tls-sni-01-port 4443 --allow-subset-of-names --cert-name maxattax.com -d maxattax.com -d www.maxattax.com

成功した後、応答コマンドの使用に関するパラメータは、更新された構成ファイルに保存されます。

    /etc/letsencrypt/renewal/maxattax.com.conf
  1. 自動的に更新され、報告がない場合はOKになります。

    Sudo certbot renew --dry-run
    

注意:

检查Apache配置ファイル/etc/Apache2/ports.confがcertbotの修正を受けているかどうか。

私たちのウェブサイトは開かれていません。そのため、このドキュメントの面のために、certbotはリッスンコマンドを繰り返し追加しました。

-tls-sni-01-port

3
hixtao