자체 서명된 인증서가 있는 Apache 2.4는 항상 기본 가상 호스트로 리디렉션됩니다.

자체 서명된 인증서가 있는 Apache 2.4는 항상 기본 가상 호스트로 리디렉션됩니다.

저는 Apache 2.4를 사용하여 자체 서명된 인증서를 사용하여 작동하는 가상 호스트를 만들려고 노력해 왔습니다. 나는 많은 설정 조합을 시도했지만, 무슨 일이 있어도 Firefox에서 시도하는 모든 가상 호스트는 (캐시를 지운 후) 기본 설정으로 바로 이동합니다. 내가 받은 유일한 오류 메시지는 Apache error.log에 있습니다(모든 하위 도메인 vhost 로그에는 오류 메시지가 없습니다).

[Mon Jun 17 19:32:48.866641 2019] [ssl:debug] [pid 3084] ssl_engine_kernel.c(2122): [client 192.168.1.100:57956] AH02044: 서버 이름 하위 도메인.7d.net Virtual과 일치하는 SSL이 없습니다. 호스트(기본/첫 번째 가상 호스트 사용)

현재 설정은 IP 기반 가상 호스팅입니다(기본 호스트는 하나의 물리적 IP 주소를 사용하고, 여러 가상 호스트는 여러 가상 IP 주소를 일대일로 사용). 이전에 Apache는 동일한 동작을 갖는 하나의 물리적 IP 주소만 가진 이름 기반 가상 호스트를 사용했습니다.

각 가상 호스트는 자체 서명된 인증서를 사용하며 이전의 모든 가상 호스트는 동일한 인증서를 사용했습니다. SSL 인증서에 대해서는 오류 메시지가 보고되지 않습니다. 각 인증서는 해당 이름과 일치합니다.오픈SSL 1.1.0인증서를 생성하는 데 사용됩니다.

자체 서명된 인증서 외에도 Apache는 Starfield Class 2 Certificate Authority.

DNS 서버가 설치되어 있지 않으며 /etc/hostsIP 주소와 호스트 이름당 하나의 파일만 설치되어 있으며 잘 작동합니다.

아파치 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-default-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>

아파치2 상태:

트리플세로:~# 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/" 메커니즘=기본
뮤텍스 mpm-accept: using_defaults
뮤텍스 fcgid-파이프: using_defaults
상호 배타적인 감시 콜백: using_defaults
뮤텍스 재정의 매핑: using_defaults
뮤텍스 SSL-스테이플링-새로 고침: using_defaults
상호 배타적인 gnutls 캐시: using_defaults
뮤텍스 gnutls-ocsp: using_defaults
뮤텍스 fcgid-proctbl: using_defaults
상호 배타적 SSL 스테이플링: using_defaults
상호 배타적 프록시: using_defaults
상호 배타적 SSL 캐시: using_defaults
Pid파일: "/var/run/apache2/apache2.pid"
정의: DUMP_VHOSTS
정의: DUMP_RUN_CFG
사용자: name="www-data" id=33
그룹:이름="www-데이터" id=33
싼위안:~#

하위 도메인 오류.log

[Tue Jun 18 00:05:46.274025 2019] [ssl:info] [pid 3050] AH01914: SSL 프로토콜에 대해 서버 하위 도메인.7d.net:443 구성
[2019년 6월 18일 화요일 00:05:46.274415] [ssl:debug] [pid 3050] ssl_engine_init.c(1756): AH02209: CA 인증서: OU=Starfield Level 2 인증 기관, O=Starfield Technologies\\ , Inc., C=미국
[Tue Jun 18 00:05:46.274481 2019] [ssl:debug] [pid 3050] ssl_engine_init.c(413): AH01893: TLS 확장 처리 구성
[Tue Jun 18 2019 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= 하위 도메인. 7d.net, OU=개발, O=ZZZ Corp., L=Skycity, ST=Highstate, C=XX / 일련 번호: B06BB41BBE840955 / 이전 날짜: 2019년 6월 16일 22:00:11 GMT / 이후 날짜: 6월 15일 22:00: 2020년 11월 GMT]
[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

포트 433은 Apache 파일에서 선언되지 않았 ports.conf으므로 가상 호스트를 찾을 수 없어 기본 SSL 가상 호스트로 리디렉션됩니다.

"조금 큰" 버그를 발견한 @Freddy에게 감사드립니다.

답변2

"(하위 도메인 가상 호스트 로그에 오류 메시지 없음)"

그게 (아마도) 당신의 단서입니다. :) 여기에는 여러 개의 (conf) 파일이 있습니다. 나는 당신이 (기본적으로) extra/httpd-vhosts.conf.which 를 생략했다고 추측합니다.정의모든/모든 웹 호스트.

버전 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 상자 중 하나의 예제를 공유하고 있습니다. 하지만 그건오직변경됨뿌리아파치 설치 경로. apache24내부의 모든 것(폴더 포함)은 apache24동일해야 합니다. 따라서 따라가면 설정이 완료되어야 합니다.

이는 귀하의 인증서가 검토를 통과한다는 것을 보장하지 않습니다. 그러나 이것은 다른 스레드에 대한 것입니다. :)

화타이

관련 정보