Apache에서 TLS 1.1 및 1.2를 비활성화하는 방법은 무엇입니까? (예상대로 동작하는 다른 모든

mod_ssl 및 OpenSSL v1.0.1과 함께 Apache 2.2.22를 실행하는 Ubuntu 12.04.2 LTS 서버가 있습니다.

내 vhosts 구성 (예상대로 동작하는 다른 모든 것)에서 SSLProtocol와 줄이 -all +SSLv3있습니다.

해당 구성을 사용하면 TLS 1.1 및 1.2가 활성화되어 올바르게 작동합니다 .이 구성 에서는 SSLv3 활성화 될 것으로 기대하기 때문에 반 직관적 입니다.

를 사용하여 TLSv1을 활성화 / 비활성화 할 수 -/+TSLv1있으며 예상대로 작동합니다. 그러나 +/-TLSv1.1+/-TLSv1.2유효한 구성 옵션이 아니다 – 나는 그들에게 그런 식으로 사용하지 않도록 할 수 있습니다.

왜 내가 이것을하고 싶습니까? TLS를 사용하는 서버와 버그가있는 타사 응용 프로그램 (제어 할 수없는)을 처리하고 있으며 앞으로 진행하려면 완전히 비활성화해야합니다.



답변

이 버그에 흥미를 느꼈고 (그렇습니다. 나는 그것을 재현 할 수있었습니다) 최신 안정 버전의 소스 코드를보고 mod_ssl설명을 찾았습니다. 나와 함께, 이것은 아마추어 스택 오버 플로우를 얻을 것입니다 :

이 때 SSLProtocol의 해석이, 그것은 결과 char이 같은보고 뭔가 :

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

새 서버 컨텍스트를 시작하면 사용 가능한 모든 프로토콜이 활성화되고 위의 char비트 비트 AND 연산을 사용하여 위의 프로토콜을 검사하여 비활성화 할 프로토콜을 결정합니다 . 이 경우 SSLv3이 명시 적으로 활성화 된 유일한 프로토콜 인 경우 나머지 3 개는 비활성화됩니다.

OpenSSL은 TLSv1.1에 대한 프로토콜 설정을 지원하지만 SSLProtocol이 옵션을 설명하지 않으므로 비활성화되지 않습니다. OpenSSL v1.0.1에는 TLSv1.2와 관련하여 알려진 문제가 있지만 지원되는 경우 TLSv1.1과 동일하다고 가정합니다. mod_ssl에 의해 인식 / 처리되지 않으므로 비활성화되지 않습니다.

mod_ssl의 소스 코드 참조 :

SSLProtocol라인 925에 구문 분석됩니다 pkg.sslmod/ssl_engine_config.c
에 라인 (444)에 정의 된 위의 함수에서 사용되는 옵션 pkg.sslmod/mod_ssl.h
의 모든 프로토콜에서의 586 번째 줄에 활성화됩니다 pkg.sslmod/ssl_engine_init.c후속 라인 비활성화됩니다 whereafter 특정 프로토콜

어떻게 비활성화합니까?

몇 가지 옵션이 있습니다.

  1. 다음을 사용하여 OpenSSL 구성 파일에서 비활성화하십시오.
    Protocols All,-TLSv1.1,-TLSv1.2
  2. 다시 작성 mod_ssl😉

답변

이 문제는 mod_ssl Apache 페이지 ( http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#comment_1136) 의 의견에서도 해결됩니다 .

Ubuntu 12.04에 Apache 2.2.23이 있으면 문제가 발생하지 않은 것입니다. 의견에 따르면 TLSv1.1 및 TLSv1.2를 활성화 할 수 있지만 TLSv1.0도 활성화됩니다.

SSLProtocol All -SSLv2 -SSLv3


답변

우선, 서버에서 포트 443기본 가상 호스트 (Apache가로드 한 첫 번째 SSL 가상 호스트)를 식별하고 구성 파일을 편집해야합니다. 대부분의 사용자는 서버에 ssl.conf 파일이 있으며 포트 443에 대한 호스트가 구성되어 있습니다. 이 파일의 이름이 “s”로 시작하면 vhosts.conf에 구성된 vhost ( “v”로 시작) 전에로드됩니다. 따라서 이것이 귀하의 경우인지 확인하고 (거의 모든 사람에게 “예”입니다) 해당 파일의 프로토콜을 변경하십시오 . 충분 해!

비슷한 문제가 여기에 게시되었습니다 : Apache에서 TLS 1.1 및 1.2를 비활성화하는 방법은 무엇입니까? . HBruijn에 따르면 :

IP VirtualHosts가 없으면 실제로 SSLProtocol 지시문의 첫 항목 설정은 전체 서버 및 / 또는 TLS를 지원하는 모든 이름 기반 VirtualHost에 사용됩니다.

그리고 여기 또 하나 : Apache에서 단일 VirtualHost (푸들)에 대해 SSLProtocol을 설정할 수 있습니까? . vallismortis에 따르면 :

구성 파일에서 첫 번째 VirtualHost에 대해서만 SSLProtocol을 설정할 수 있습니다. 모든 후속 VirtualHost 항목은 첫 번째 항목에서 해당 설정을 상속하고 OpenSSL 버그로 인해 자체 설정을 자동으로 무시합니다.

그건 그렇고 : 주어진 포트에 대한 서버의 기본 호스트는 서버 이름 식별 (또는 잘못된 서버 이름)없이 서버에 도착하는 해당 포트에 대한 요청에 응답하는 호스트입니다. 예 : 브라우저의 주소 표시 줄에 입력 한 IP 또는 잘못된 DNS 테이블로 인해 잘못된 리디렉션이 발생했습니다.


답변