2017-12-08 2 views
0

Apache에서 역방향 프록시를 사용하여 AWS APIGateway URL을 앞두고 싶습니다. 그 이유는 엄격한 방화벽 뒤에 서비스를 프로비저닝하기 위해 고정 IP가 필요한 프로세스와 현재 인프라 스트럭처에 mod_proxy가 이미 있기 때문입니다. 내가 구현하고자하는 솔루션은 단순히 mod_proxy를 통해 https-> https (apiGateway)를 라우팅하는 것입니다.Apache ProxyPass SNI가있는 HTTPS 및 원격 서버

하지만 AWS는 SNI를 사용하므로 핸드 셰이크에 mod_proxy를 사용할 수 없습니다.

나는 다음과 같은 설정이

<IfModule mod_ssl.c> 
<VirtualHost *:443> 
    ProxyPreserveHost On 
    SSLProxyEngine On 

    ProxyPass /api/1_0/ https://xxx.execute-api.eu-west-1.amazonaws.com/1_0/ 
    ProxyPassReverse /api/1_0/ https://xxx.execute-api.eu-west-1.amazonaws.com/1_0/ 

다음 로그가 내가있는 OpenSSL을 사용하여 연결하는 경우

proxy_util.c(2020): AH00942: HTTPS: has acquired connection for (xxx.execute-api.eu-west-1.amazonaws.com) 
proxy_util.c(2610): AH00962: HTTPS: connection complete to 52.x.x.x:443 (xxx.execute-api.eu-west-1.amazonaws.com) 
AH01964: Connection to child 0 established (server domain.com:443) 
AH02003: SSL Proxy connect failed 
SSL Library Error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure 
AH01998: Connection closed to child 0 with abortive shutdown (server domain.com:443) 
AH01997: SSL handshake failed: sending 502 

, 나는 비슷한 오류

openssl s_client -tls1_2 -connect xxx.execute-api.eu-west- 
1.amazonaws.com:443 
CONNECTED(00000003) 
140735866254216:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert 
handshake failure:s3_pkt.c:1494:SSL alert number 40 
140735866254216:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:659: 
을 보여줄 수 디버그 모드에서 사용할 수있는 활성화

SNI에 대해 -servername을 추가하면 유효한 연결이됩니다.

SSL handshake has read 3601 bytes and written 489 bytes 
--- 
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 
... 

그러므로 mod_proxy와 mod_ssl은 서버 이름을 원격 https 서버로 보내지 않고 버그가 될 수 있다고 생각합니다.

내가 서버 버전의 우분투 14.04를 실행하고 있습니다 : 아파치/2.4.7 (우분투) 서버 내장 : I가 시도 2017년 9월 18일 16시 37분 54초 OpenSSL을 1.0.1f 2014년 1월 6일

SSLProxyProtocol을 TLS1_2로 제한하고 암호 목록도 제한하지만 sslv3 경고 핸드 셰이크 실패 로그는 계속 존재합니다.

아무도이 문제가 발생하지 않았으며 SNI 값이 전송되고 있는지 또는 아파치 모듈에서이 제한 사항을 확인하는 방법을 알고 있습니까?

답변

0

이는 구성 초기에 ProxyPreserveHost On이 설정 되었기 때문입니다. 프록시 태그에서 ProxyPreserveHost Off 설정 은 다음과 같이 예상이 완료 :이 지침에

<Proxy "https://xxx.execute-api.eu-west-1.amazonaws.com/1_0"> 
    ProxyAddHeaders off 
    ProxyPreserveHost off 
</Proxy> 

정보 :

활성화

,이 옵션은 호스트를 전달합니다 : 라인 입력 요청에서 프록시 호스트로, ProxyPass 라인에 지정된 호스트 이름 대신 입니다.

이 옵션은 일반적으로 꺼져 있어야합니다. 원래의 호스트 헤더가 백엔드 서버에 의해 평가되어야하는 프록시 이름의 대량 호스트 기반 가상 호스트 ( )와 같은 특수 구성에서는 에 주로 유용합니다.