Apache에서 TLS 1.1 및 1.2를 비활성화하는 방법은 무엇입니까?


13

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를 사용하는 서버와 버그가있는 타사 응용 프로그램 (제어 할 수없는)을 처리하고 있으며 앞으로 진행하려면 완전히 비활성화해야합니다.


호기심에서-왜 TSL을 비활성화하고 싶을까요? 내가 수집 한 것에서 SSLv1 / 2 / 3보다 안전해야하므로 v1.1이 아닌 v1.2 만 허용하려는 이유 만 상상할 수 있지만 (여기서는 나를 여기로 가져 왔습니다) 이전 소프트웨어와의 일부 호환성 문제를 제외하고 SSL을 선호합니까?
codeling

@codeling TLS에 버그가있는 오래된 타사 소프트웨어로 작업합니다.
Kyle Lowry

답변:


23

이 버그에 흥미를 느꼈고 (그렇습니다. 나는 그것을 재현 할 수있었습니다) 최신 안정 버전의 소스 코드를보고 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;-)

완벽한 대답처럼 보입니다. OpenSSL 구성 파일 중 어느 / 무엇 / 어디를 확인해야합니까?
Kyle Lowry

openssl.cnf-위치는 설치에 따라 다릅니다. 데비안 스퀴즈에서 나는 /etc/ssl/openssl.cnfOS X에서 /System/Library/OpenSSL/openssl.cnfWindows 7에서 발견했습니다 %systemdrive%\openssl\openssl.cnf.
Mathias R. Jessen 2016 년

1
지금 설정 파일을보고 있습니다. 구문은 귀하의 답변에 따라 예상했던 것과 약간 다르게 보이며 해당 구성 파일에서 활성화 / 비활성화 된 프로토콜을 명시 적으로 제어 할 수있는 온라인을 찾을 수 없습니다. 그것에 대한 언급이 있습니까? 감사.
Kyle Lowry

다른 옵션-사용 : SSLProtocol위와 같은 방식으로 ( SSLProtocol All -TLSv1.1 -TLSv1.2쉼표가 필요하지 않음) 전역 또는 특정 Apache 구성에서 위에서 언급 한 SSL 전역 구성을 '재정의'합니다. (모든 기본 SSL 암호를 변경하지 않으려면-> 필요한 암호가 약한 것으로 간주됩니다.)
bshea


1

우선, 서버에서 포트 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 테이블로 인해 잘못된 리디렉션이 발생했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.