具有自签名证书的 Apache 2.4 始终重定向到默认虚拟主机

具有自签名证书的 Apache 2.4 始终重定向到默认虚拟主机

我一直在尝试使用 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实际上,在每个虚拟主机中)。443VirtualHost

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应该是相同的。因此,如果您遵循,您应该已设置完毕。

这并不能保证您的证书会通过审核。但这是针对不同的线程的。 :)

华泰

相关内容