2017-10-30 27 views
1

내 응용 프로그램에 HSTS를 구현하고 싶습니다.AWS Elastic Load Balancer에서 HTTP Strict Transport Security (HSTS)를 구현하는 방법은 무엇입니까?

SSL을 종료하고 리버스 프록시로 사용되는 Apache 서버 인 내 응용 프로그램으로 트래픽을 전달하는 ELB가 있습니다.

나는 HSTS를 구현하기 위해 요청에 Strict-Transport-Security 헤더를 추가해야한다는 것을 알고있다.

유감스럽게도 SSL을 ELB에서 종료하므로 HTTPS 가상 호스트에 추가해야하는 아파치 서버에만 Apache 가상 서버를 구현할 수 없으므로 Apache 가상 서버를 구현할 수없는 것으로 보입니다.

즉, 전달할 때 ELB가 Strict-Transport-Security 헤더를 요청에 추가해야합니다.

어떻게하면됩니까? 나에게 도움이되는 일종의 보안 정책을 추가 할 수 있습니까?

답변

2

나는 AWS Support에 물었고 현재로서는 ELB가 클라이언트의 요청에 HSTS 헤더를 추가 할 수 없다고 대답했습니다. 그래서, 나는 아파치 서버를 사용하는 해결 방법을 찾기로했다.

HSTS RFC 상태

HSTS 호스트 비보안 전송을 통해 전달 된 HTTP 응답의 STS 헤더 필드를 포함해서는 안 것을 : 여기 내가 찾은 솔루션입니다. 그때 무슨 짓을

는 아파치에서 HTTP => HTTPS를 리디렉션 후에 헤더 을 설정했다. 이 리디렉션에는 플래그 [L]이 있으므로 301 리디렉션에 헤더가 포함되지 않지만 https 요청은 포함되지 않습니다. 내 아파치 설정은 다음과 같습니다 : 아파치 2.4+와 함께 작업하는 경우

<VirtualHost *:80> 
... 
    #http=>https 
    RewriteCond %{HTTP:X-Forwarded-Proto} =http 
    RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent] 

    #hsts 
    Header set Strict-Transport-Security "max-age=31536000" 
0

Maybe? - 이전과 비슷한 시나리오를 해결했습니다.

+0

기사 주셔서 감사합니다."HTTP Strict Transport Security (HSTS)와 함께 사용하면 ELB를 매우 견고하게 설정할 수 있습니다." 그래서, 그게 HSTS를 구현하지 않는 것 같아요 SSLv2 및 SSLv3을 해제합니다. – Pedreiro

0

, 당신은 expressions과 지침 <If>, <ElseIf><Else>에 익숙 할 수 있습니다.

dev 환경, 준비 환경 및 프로덕션 환경간에 복잡한 구성이 있으므로 RewriteRule 플래그로 [L] 플래그를 사용하면 절대로 절사하지 않습니다.

내가 내 htaccess로에 배치 다음 용액에 나를 데리고 :

<IfModule mod_headers.c> 
    <If "%{REQUEST_SCHEME} == 'https' || %{HTTP:X-Forwarded-Proto} == 'https'"> 
     Header set Strict-Transport-Security "max-age=31536000" 
    </If> 
</IfModule> 

그것은 내 환경에서 잘 작동하고 나는 그것이 RFC를 충족 더 안정적이라고 생각합니다.

직접 인스턴스에 충돌 한 적이없는 경우 "%{REQUEST_SCHEME} == 'https' 부분을 삭제할 수 있지만 이는 개발 환경의 디버그 프로세스의 일부입니다.

HSTS RFC의 실제 사양에 대해 올바른 방향으로 나를 가리켜 주신 덕분에 Pedreiro에게 많은 감사를드립니다.