我一直在尝试使用 Apache 2.4 使用自签名证书来创建工作虚拟主机。我已经尝试了很多设置组合,但无论如何,我在 Firefox 中尝试的每个虚拟主机都会直接进入默认设置(清除缓存后)。我收到的唯一错误消息位于 Apache error.log 中(所有子域虚拟主机日志都没有错误消息):
[Mon Jun 17 19:32:48.866641 2019] [ssl:debug] [pid 3084] ssl_engine_kernel.c(2122): [client 192.168.1.100:57956] AH02044: 找不到服务器名称 subdomain.7d.net 的匹配 SSL 虚拟主机(使用默认/第一个虚拟主机)
当前的设置是基于 IP 的虚拟主机(默认主机使用一个物理 IP 地址,多个虚拟主机使用多个虚拟 IP 地址,一对一)。在此之前,Apache 使用一种基于名称的虚拟主机,只有一个物理 IP 地址,具有相同的行为。
每个虚拟主机都使用自己的自签名证书,此前所有虚拟主机都使用同一个证书。没有因 SSL 证书而报告错误消息。每个证书都与其相应的名称匹配。OpenSSL 1.1.0用于生成证书。
除了自签名证书之外,Apache 还使用Starfield Class 2 Certificate Authority
.
没有安装 DNS 服务器,只有一个/etc/hosts
文件,每个 IP 地址和主机名都工作得很好。
阿帕奇2.4.25正在运行Debian GNU/Linux «拉伸»。
端口配置文件(我尝试将Listed 443
指令放在条件块之外,但行为是相同的)。
# 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
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
001-默认-ssl.conf
<IfModule mod_ssl.c>
#<VirtualHost 192.168.1.201:443>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName triplecero.7d.net
#ServerAlias www.7d.net
DocumentRoot /var/www/html
LogLevel info ssl:debug
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include conf-available/serve-cgi-bin.conf
SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/triplecero.7d.net.crt
SSLCertificateKeyFile /etc/ssl/localcerts/triplecero.7d.net.key
SSLCACertificateFile /etc/ssl/certs/Starfield_Class_2_CA.pem
SSLVerifyClient optional
SSLVerifyDepth 10
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>
子域名配置文件
<VirtualHost 192.168.1.210:433>
#<VirtualHost subdomain.7d.net:433>
ServerName subdomain.7d.net
DocumentRoot "/var/www/subdomain"
DirectoryIndex index.php
LogLevel info ssl:debug
CustomLog ${APACHE_LOG_DIR}/subdomain-access.log combined
ErrorLog ${APACHE_LOG_DIR}/subdomain-error.log
SSLEngine On
SSLCertificateFile "/etc/ssl/localcerts/subdomain.7d.net.crt"
SSLCertificateKeyFile "/etc/ssl/localcerts/subdomain.7d.net.key"
SSLCACertificateFile "/etc/ssl/certs/Starfield_Class_2_CA.pem"
SSLVerifyClient optional
SSLVerifyDepth 10
<Directory "/var/www/subdomain">
Redirect "http://subdomain.7d.net" "https://subdomain.7d.net"
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
Apache2状态:
Triplecero:~# apache2ctl -S 虚拟主机配置: 192.168.1.210:433 subdomain.7d.net (/etc/apache2/sites-enabled/grupoglobaleyr.conf:3) [省略了许多其他 VirtualHosts ] *:80 Triplecero.7d.net (/etc/apache2/sites-enabled/000-default.conf:2) *:443 是 NameVirtualHost 默认服务器 Triplecero.7d.net (/etc/apache2/sites-enabled/001-default-ssl.conf:3) 端口 443 namevhost Triplecero.7d.net (/etc/apache2/sites-enabled/001-default-ssl.conf:3) 端口 443 namevhost Triplecero.7d.net (/etc/apache2/sites-enabled/002-default-tls.conf:2) 服务器根目录:“/etc/apache2” 主文档根目录:“/var/www/html” 主错误日志:“/var/log/apache2/error.log” 互斥体默认值:dir="/var/run/apache2/"机制=default 互斥体 mpm-accept:using_defaults 互斥 fcgid-pipe:using_defaults 互斥看门狗回调:using_defaults 互斥体重写映射:using_defaults 互斥 ssl-stapling-refresh:using_defaults 互斥 gnutls 缓存:using_defaults 互斥 gnutls-ocsp:using_defaults 互斥 fcgid-proctbl:using_defaults 互斥 ssl 装订:using_defaults 互斥代理:using_defaults 互斥 ssl 缓存:using_defaults PidFile:“/var/run/apache2/apache2.pid” 定义:DUMP_VHOSTS 定义:DUMP_RUN_CFG 用户:名称=“www-data”id=33 组:名称=“www-data”id=33 三元:~#
子域错误.log
[Tue Jun 18 00:05:46.274025 2019] [ssl:info] [pid 3050] AH01914:为 SSL 协议配置服务器 subdomain.7d.net:443 [2019 年 6 月 18 日星期二 00:05:46.274415] [ssl:debug] [pid 3050] ssl_engine_init.c(1756): AH02209: CA 证书:OU=Starfield 2 级证书颁发机构,O=Starfield Technologies\\, Inc., C=美国 [2019 年 6 月 18 日星期二 00:05:46.274481] [ssl:debug] [pid 3050] ssl_engine_init.c(413):AH01893:配置 TLS 扩展处理 [2019 年 6 月 18 日星期二 00:05:46.340584 2019] [ssl:debug] [pid 3050] ssl_util_ssl.c(443): AH02412: [subdomain.7d.net:443] 名称“subdomain.7d.net”的证书匹配 [主题:emailAddress=triplecerogmail.com,CN=subdomain.7d.net,OU=Development,O=ZZZ Corp.,L=Skycity,ST=Highstate,C=XX / 颁发者:emailAddress=triplecerogmail.com,CN=subdomain。 7d.net,OU=Development,O=ZZZ Corp.,L=Skycity,ST=Highstate,C=XX / 序列号:B06BB41BBE840955 / 不早于:2019 年 6 月 16 日 22:00:11 GMT / 不晚于:6 月 15 日 22:00: 2020 年 11 月格林尼治标准时间] [2019 年 6 月 18 日星期二 00:05:46.340606] [ssl:info] [pid 3050] AH02568:从 /etc/ssl/localcerts/subdomain.7d.net 配置的证书和私钥 subdomain.7d.net:443:0。 crt 和 /etc/ssl/localcerts/subdomain.7d.net.key
答案1
重定向的原因是指令中设置了错误的逻辑端口(433
实际上,在每个虚拟主机中)。443
VirtualHost
Apache 文件中从未声明过 433 端口ports.conf
,因此未找到导致重定向到默认 SSL 虚拟主机的虚拟主机。
感谢@Freddy 发现了“小大”错误。
答案2
“(子域虚拟主机日志均无错误消息)”
那是(应该是)你的线索。 :) 这里有几个(conf)文件在起作用。我猜你(基本上)省略了extra/httpd-vhosts.conf
.哪个定义您的所有/任何虚拟主机。
2.4 版本比之前的版本变得更加模块化。因此,大多数旧方法要么不起作用,要么已被移动。
apache24/httpd.conf
持有全球的配置,以及基本的主机/IP 的东西。
apache24/extra/httpd-vhosts.conf
常见的虚拟主机定义。
# PRIMARY (default) Vhost
# Everything is on a SECURE socket. Redirect accordingly
<VirtualHost *:80>
ServerName main-domain.vhost
Redirect permanent / https://main-domain.vhost/
</VirtualHost>
# another Vhost on same IP but with different name
<VirtualHost *:80>
ServerName another-domain.vhost
Redirect permanent / https://another-domain.vhost/
</VirtualHost>
...
####################################################################
#NameVirtualHost *:443
####################################################################
# MAIN Vhost
<VirtualHost *:443>
ServerAdmin me@localhost
DocumentRoot "/usr/local/www/data"
ServerName main-domain.vhost
ServerAlias www.main-domain.vhost
SSLEngine on
SSLCertificateFile "/usr/local/etc/letsencrypt/live/main-domain.vhost/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/main-domain.vhost/privkey.pem"
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/main-domain.vhost/fullchain.pem"
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
# HSTS (mod_headers is required) (7884000 seconds = 3 months)
Header always set Strict-Transport-Security "max-age=15768000"
...
</VirtualHost>
# We now need to include our INDIVIDUAL/ADDITIONAL (V) hosts
# We do so thusly
# They all run on a SSL
Include etc/apache24/extra/hosts/another-domain.vhost.conf
# NOTE above, the .conf files live in a SUBdirectory of the "extra" folder (hosts)
好的,现在我们继续讨论个人V主机.conf
文件
apache24/extra/hosts/*.conf
apache24/extra/hosts/another-domain.vhost.conf
# # # # # # # # # # # # # # # # # # # # # # # #
# # # another-domain.vhost
# # # # # # # # # # # # # # # # # # # # # # # #
<VirtualHost *:443>
ServerAdmin me@localhost
DocumentRoot "/usr/local/www/another-domain.vhost"
ServerName another-domain.vhost
ServerAlias www.another-domain.vhost
SSLEngine on
SSLCertificateFile "/usr/local/etc/letsencrypt/live/another-domain.vhost/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/another-domain.vhost/privkey.pem"
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/another-domain.vhost/fullchain.pem"
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
# HSTS (mod_headers is required) (7884000 seconds = 3 months)
Header always set Strict-Transport-Security "max-age=15768000"
...
</VirtualHost>
这就是全部相关的您的文件中需要满足 apache(2.4) 要求的信息。正如您所看到的,我 1) 使用“letsencrypt”作为我的证书提供商,2) 我正在分享我的一个 BSD 盒子中的示例。但那个仅有的改变了根Apache 安装路径。apache24
(包括文件夹)中的所有内容都apache24
应该是相同的。因此,如果您遵循,您应该已设置完毕。
这并不能保证您的证书会通过审核。但这是针对不同的线程的。 :)
华泰