2017-11-21 17 views
0

저는 httpd를 사용하여 SSL 처리를 오프로드하고 HTTP 요청을 AJP를 통해 tomcat으로 전달했습니다. 저는 이제 AJP 대신에 httpd와 HTTP 대신 haproxy로 옮깁니다. https를 통해 haproxy에 연결할 수 있으며 적절한 http 요청이 tomcat에 도착하는 것을 볼 수 있습니다. 클라이언트 인증서를 확인할 때 내 tomcat 코드가 인증서에서 CN을 검색 할 수 없습니다. 나는 다음과 같은 HTTP 헤더를 참조 HTTP 연결에 대한 캡처 파일을보고haproxy에서 tomcat으로 클라이언트 인증서 전달

http-request set-header X-SSL      %[ssl_fc] 
http-request set-header X-SSL-Client-Verify   %[ssl_c_verify] 
http-request set-header X-SSL-Client-SHA1   %{+Q}[ssl_c_sha1] 
http-request set-header X-SSL-Client-DN    %{+Q}[ssl_c_s_dn] 
http-request set-header X-SSL-Client-CN    %{+Q}[ssl_c_s_dn(cn)] 
http-request set-header X-SSL-Issuer    %{+Q}[ssl_c_i_dn] 
http-request set-header X-SSL-Client-Not-Before  %{+Q}[ssl_c_notbefore] 
http-request set-header X-SSL-Client-Not-After  %{+Q}[ssl_c_notafter] 

: 나는 HTTP 헤더에 클라이언트 인증서 정보를 전달할 수 있으리라는 희망에서 haproxy.cfg에 다음 줄을 추가

GET /api/subscriber/count?_=1511258656303 HTTP/1.1 
Host: 192.168.20.192 
Accept: */* 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 
Referer: https://192.168.20.192/dashboard.jsp 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.8,he;q=0.6 
Cookie: gsScrollPos-1158=0; gsScrollPos-536=0; gsScrollPos-873=2579; gsScrollPos-2263=0; gsScrollPos-472=0; gsScrollPos-468=; JSESSIONID=B433B96FB2616A8447703BFAE541DC2C 
X-SSL: 1 
X-SSL-Client-Verify: 0 
X-SSL-Client-SHA1: 
X-SSL-Client-DN: 
X-SSL-Client-CN: 
X-SSL-Issuer: 
X-SSL-Client-Not-Before: 
X-SSL-Client-Not-After: 
X-Forwarded-Proto: https 
X-Forwarded-For: ::ffff:192.168.12.171 
Connection: close 

인증서 정보가 비어있는 것을 볼 수 있습니다.

내가 잘못 했나요? 바람둥이에 인증서를 전달하는 데 필요한 다른 것이 있습니까? AJP를 사용하여이 작업을 수행 할 수 있습니까?

global 
    log   127.0.0.1 local4 

    chroot  /var/lib/haproxy 
    pidfile  /var/run/haproxy.pid 
    maxconn  4000 
    user  haproxy 
    group  haproxy 
    daemon 

    # turn on stats unix socket 
    stats socket /var/lib/haproxy/stats 

    # ssl ciphers and options 
    ssl-default-bind-options no-sslv3 
    ssl-default-bind-ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:ECDH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS 
    tune.ssl.default-dh-param 2048 

#--------------------------------------------------------------------- 
# common defaults that all the 'listen' and 'backend' sections will 
# use if not designated in their block 
#--------------------------------------------------------------------- 
defaults 
    mode     http 
    log      global 
    option     httplog 
    option     dontlognull 
    option http-server-close 
    option forwardfor  except 127.0.0.0/8 
    option     redispatch 
    retries     3 
    timeout http-request 10s 
    timeout queue   1m 
    timeout connect   10s 
    timeout client   1m 
    timeout server   1m 
    timeout http-keep-alive 10s 
    timeout check   10s 
    maxconn     3000 

frontend https 
    mode http 
    bind :::443 ssl crt /opt/vasona/CA/private/sa_bundle.pem ca-file /opt/vasona/CA/certs/crtServer.crt verify optional 


    http-request set-header X-SSL      %[ssl_fc] 
    http-request set-header X-SSL-Client-Verify   %[ssl_c_verify] 
    http-request set-header X-SSL-Client-SHA1   %{+Q}[ssl_c_sha1] 
    http-request set-header X-SSL-Client-DN    %{+Q}[ssl_c_s_dn] 
    http-request set-header X-SSL-Client-CN    %{+Q}[ssl_c_s_dn(cn)] 
    http-request set-header X-SSL-Issuer    %{+Q}[ssl_c_i_dn] 
    http-request set-header X-SSL-Client-Not-Before  %{+Q}[ssl_c_notbefore] 
    http-request set-header X-SSL-Client-Not-After  %{+Q}[ssl_c_notafter] 
    reqadd X-Forwarded-Proto:\ https 
    default_backend tomcat-mgmt 

backend tomcat-mgmt 
    mode http 
    option tcp-smart-connect 
    server tomcat :8009 

backend tomcat-cp-events 
    mode http 
    option tcp-smart-connect 
    server tomcat :23237 

다른 정보가 필요한 경우 알려 주시기 바랍니다 :

여기 내 전체 haproxy.cfg입니다. 고마워, 기돈

답변

0

로 알려드립니다. 잘못된 인증서 파일을 ca 파일로 사용하고 있습니다. 올바른 pem 파일을 사용하면 인증서 정보가 백엔드로 올바르게 전달됩니다.