HTTPS 프로토콜에서 하나의 호스트만 표시하도록 Apache를 조정하는 방법

HTTPS 프로토콜에서 하나의 호스트만 표시하도록 Apache를 조정하는 방법

FreeBSD에 웹 서버 Apache가 있고 SSL을 여러 도메인 중 하나에만 바인딩하고 싶습니다. 이제 내 구성은

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

모두 괜찮습니다. 하지만 브라우저가 켜져 있습니다.https://www.domain01.com/ssldomain.com 사이트의 페이지를 보여줍니다. 그것은 나쁘다.

ssldomain.com 페이지가 표시되지 않도록 Apache를 조정하려면 어떻게 해야 합니까?https://www.domain01.com브라우저에서.

UPD: 두 도메인 모두에 대해 VirtualHosts :80 및 :443을 정의하려고 했습니다. 1) 두 도메인 모두에 ssldomain.com의 원래 SSL을 사용합니다. 2) ssldomain.com에는 원본 SSL을 사용하고 domain01.com에는 자체 서명 SSL을 사용합니다. 두 경우 모두 브라우저에 HTTPS 인증서 오류가 표시되지만 페이지는 올바릅니다.

이 두 가지 경우에 대한 구성

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/ssl/domain01.com/server.cert"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/domain01.com/server.key"
# This is for second case (of course 2 lines above are comments)
# SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
# SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
# SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

#Redirect permanent / http://www.domain01.com/
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

마음을 담아!

답변1

Apache는 ServerName 또는 ServerAlias와 일치하는 가상 호스트를 찾을 수 없는 경우 해당 IP(또는 이 경우 *와 같이 일치하는 와일드카드) 및 포트(443)에 대한 첫 번째 가상 호스트를 기본값으로 사용합니다. 따라서 www.ssldomain.com:443을 수행한 것처럼 포트 443에서 www.domain01.com에 대한 별도의 사이트를 설정해야 기본으로 가지고 있는 유일한 사이트로 돌아가지 않습니다.

원하는 경우 이 가상호스트를 HTTP로 다시 리디렉션하도록 설정할 수 있습니다. (이 리디렉션은 완료되었습니다.~ 후에SSL 협상에는 여전히 유효한 인증서가 필요합니다. 모든 SSL 가상 호스트에는 인증서 설정이 필요하지만 해당 가상 호스트에도 유효한 경우 동일한 인증서를 사용할 수 있습니다.

그 시점에서 인증서 오류가 발생하지 않는 이유는 무엇입니까?https://www.domain01.com? 나는 당신이 (그리고 당신이 그것을 무시하는 경우에만 www.ssldomain.com 콘텐츠를 볼 수 있습니다) 또는 당신의 인증서가 두 도메인을 모두 포함한다고 추측합니다 (이 경우 이것을 별도의 가상 호스트로 설정하고 http로 다시 리디렉션하는 것은 확실히 가는 길).

그런데, 대중의 믿음과는 반대로 당신은 그렇습니다~ 아니다SNI를 지원하지 않는 이전 브라우저의 경우에도 Apache 인스턴스에 여러 SSL 호스트를 설정하려면 별도의 IP 주소가 필요합니다. 또 다른 해결 방법이 있습니다. 자세한 내용은 여기를 참조하세요.Apache의 특정 가상 호스트에 대해 SNI 비활성화

답변2

이것은 나에게 효과적이며 도메인 순서만 변경합니다. 첫 번째는 원래 SSL 인증서가 있는 ssldomain.com이고 두 번째는 동일한 SSL 인증서와 리디렉션이 있는 domain01.com입니다.

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

Redirect permanent / http://www.domain01.com/
</VirtualHost>

@BazzaDP에게 특별한 감사를 드립니다.

관련 정보