次の設定があります。
ここで、デフォルトサーバーで次の.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で構成されたすべてのドメインが期待どおりに機能します。
基本的にデフォルトのサーバーのみをブロックしているので、これはわかりません。他のすべてのドメインはこの設定の影響を受けません。
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.com
とexample.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>