Mic*_*ael 6 virtualhost apache-2.4 ubuntu-16.04 certbot
我有以下设置:
现在,一旦我在默认服务器上启用以下 .conf,我配置的所有顶级域都会收到 SSL_ERROR_RX_RECORD_TOO_LONG 错误。如果我禁用此配置,一切都会按预期工作。
因为这个事实,我确信 apache 侦听正确的端口、正确的 IP,并且 Letsencrypt/certbot 已正确设置。
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Require all denied
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
将此更改为
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
并没有解决问题。
apache2ctl -S
Run Code Online (Sandbox Code Playgroud)
显示了预期结果,001-default-ssl.conf 和 001-default.conf 是端口 80 和端口 443 的默认值。
openssl s_client -connect workingdomain.tld:443
Run Code Online (Sandbox Code Playgroud)
印刷:
已连接(00000003) 139991513372312:错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议:s23_clnt.c:794: --- 没有可用的对等证书 --- 未发送客户端证书 CA 名称 --- SSL握手已读取7个字节并写入305个字节 --- 新,(无),密码是(无) 不支持安全重新协商 压缩:无 扩展:无 未协商 ALPN SSL 会话: 协议:TLSv1.2 密码:0000 会话 ID: 会话 ID-ctx: 主密钥: 关键参数:无 PSK 身份:无 PSK 身份提示:无 SRP 用户名: 无 开始时间:1515852550 超时:300(秒) 验证返回码:0(确定) ---
同样,一旦我禁用此配置,配置了 certbot/letsencrypt 的每个域都会按预期工作。
我不明白这一点,因为我基本上只阻止默认服务器,我的所有其他域应该不受此设置的影响。
您必须指向您的 SSL 证书 -
<VirtualHost _default_:443>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
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>
Run Code Online (Sandbox Code Playgroud)
如果您想为多个域提供服务,至少对于理解 SNI 等的现代浏览器来说,您仍然可以这样做。
首先,为每个域获取单独的 LetsEncrypt 证书。如果您有多个主机名(即, 和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
Run Code Online (Sandbox Code Playgroud)
这将为您提供 2 组证书,位于/etc/letsencrypt/live/DOMAIN/
目录下。
创建虚拟主机配置时,不要指定_default_:443
使用主机的实际 IP 并指向相应的证书文件。
<VirtualHost 10.0.1.2:443>
ServerName example1.com
ServerAlias www.example1.com
ServerAdmin webmaster@example1.com
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 webmaster@example2.com
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>
Run Code Online (Sandbox Code Playgroud)
我不在我的网站上收集表单信息等,但我确实希望所有内容都运行 HTTPS,因此我设置了虚拟主机配置以将非 HTTPS 请求重定向到 HTTPS 端,并使用重定向到的非命名包罗万象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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11485 次 |
最近记录: |