web-dev-qa-db-ja.com

SSL_ERROR_RX_RECORD_TOO_LONG certbot

次の設定があります。

  • Apache 2.4
  • Ubuntu 16.04 LTS
  • letsencrypt/certbot

ここで、デフォルトサーバーで次の.confを有効にするとすぐに、構成したすべてのトップレベルドメインにSSL_ERROR_RX_RECORD_TOO_LONGエラーが表示されます。 この構成を無効にすると、すべてが期待どおりに機能します。

このため、Apacheは正しいポートと正しいIPをリッスンし、encrypt/certbotが正しく設定されていると確信しています。

<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"
    <Directory "/var/www/html">
            Require all denied
    </Directory>
</VirtualHost>

これを

<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"
    <Directory "/var/www/html">
            Require all granted
    </Directory>
</VirtualHost>

問題は解決していません。

Apache2ctl -S 

は予想される結果を示しています。001-default-ssl.confおよび001-default.confは、ポート80およびポート443のデフォルトです。

openssl s_client -connect workingdomain.tld:443

プリント:

 CONNECTED(00000003)
 139991513372312:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
 --- 
ピア証明書なし利用可能
 --- 
送信されたクライアント証明書CA名なし
 --- 
 SSLハンドシェイクは7バイトを読み取り、305バイトを書き込みました
- -
新規、(なし)、暗号は(なし)
安全な再ネゴシエーションISサポートされていません
圧縮:なし
拡張:なし
 ALPNネゴシエーションなし
 SSL-Session:
プロトコル:TLSv1.2 
暗号:0000 
セッションID:
 Session-ID-ctx:
 Master-Key:
 Key-Arg:None 
 PSK identity:None 
 PSK identity hint:None 
 SRPユーザー名:なし
開始時間:1515852550 
タイムアウト:300(秒)
戻りコードを確認:0(ok)
 --- 
 

繰り返しますが、この構成を無効にするとすぐに、certbot/letsencryptで構成されたすべてのドメインが期待どおりに機能します。

基本的にデフォルトのサーバーのみをブロックしているので、これはわかりません。他のすべてのドメインはこの設定の影響を受けません。

4
Michael

SSL証明書を指定する必要があります-

<VirtualHost _default_:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${Apache_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example.com
    <directory /var/www-example.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${Apache_LOG_DIR}/ssl-example.com-error.log
    CustomLog ${Apache_LOG_DIR}/ssl-example.com-access.log combined
</VirtualHost>

複数のドメインにサービスを提供したい場合でも、少なくともSNIなどを理解する最新のブラウザーではサービスを提供できます。

まず、ドメインごとに別々のletencrypt証明書を取得します。ホスト名が複数ある場合(つまり、www.example.comexample.comの両方)、実際のドメインが同じであれば、それらを共有できます。

letsencrypt certonly -d example1.com -d www.example1.com -d mail.example1.com
letsencrypt certonly -d example2.com -d www.example2.com -d mail.example2.com

これにより、/etc/letsencrypt/live/DOMAIN/ディレクトリの下に2組の証明書が提供されます。

Vhost構成を作成するときは、_default_:443を指定する代わりに、ホストの実際のIPを使用して、適切な証明書ファイルを指定します。

<VirtualHost 10.0.1.2:443>
    ServerName example1.com
    ServerAlias www.example1.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example1.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example1.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${Apache_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example1.com
    <directory /var/www-example1.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${Apache_LOG_DIR}/ssl-example1.com-error.log
    CustomLog ${Apache_LOG_DIR}/ssl-example1.com-access.log combined
</VirtualHost>
<VirtualHost 10.0.1.2:443>
    ServerName example2.com
    ServerAlias www.example2.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example2.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example2.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${Apache_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example2.com
    <directory /var/www-example2.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${Apache_LOG_DIR}/ssl-example2.com-error.log
    CustomLog ${Apache_LOG_DIR}/ssl-example2.com-access.log combined
</VirtualHost>

私は自分のサイトでフォーム情報などを収集しませんが、すべてをHTTPSで実行したいので、非HTTPSリクエストをHTTPS側にリダイレクトするようにvhost configsを設定し、名前のないキャッチオールでリダイレクトしますexample1.com-

<VirtualHost *:80>
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example1.com/$1 [R,L]
</VirtualHost>
<VirtualHost *:80>
  ServerName example1.com
  ServerAlias www.example1.com
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example1.com/$1 [R,L]
</VirtualHost>
<VirtualHost *:80>
  ServerName example2.com
  ServerAlias www.example2.com
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example2.com/$1 [R,L]
</VirtualHost>
3
ivanivan