2017-08-25 65 views
0

我有一個Ngnix服務器[前端處說XX.XX]等Ngnix服務器合格證書

如果我使用curl命令[其他後端服務器yy.yy說]我通過客戶端cetificate和關鍵yy.yy服務器上我是從後端服務器獲取成功

問題:如果 使用curl命令我傳遞客戶端cetificate和關鍵XX.XX服務器上的我得到錯誤

400錯誤的請求

否req uired SSL證書被送往

所以在我的情況XX.XX不流通證書yy.yy服務器

請幫我

對於yy.yy服務器

server { 
    listen  443; 

    server_name yy.yy 
    ssl on; 
    ssl_certificate  /etc/yyyycert.pem; 
    ssl_certificate_key /etc/yy.key; 
    ssl_client_certificate /etc/ca-chain-scb.cert.pem; 
    ssl_verify_client on; 
    location/{ 
     proxy_set_header  Host   $host; 
     proxy_set_header  X-Real-IP  $remote_addr; 
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header  X-Forwarded-User  $remote_user; 
     proxy_pass http://127.0.0.1:8080; 
     } 
} 

server { 
    listen  443; 

    server_name xx.xx 
    ssl on; 
    ssl_certificate  /etc/xxxx.pem; 
    ssl_certificate_key /etc/xx.key; 
    ssl_verify_client on; 
    location ~ ^/SCB/(.*)$ { 
     proxy_set_header X-SSL-CERT $ssl_client_cert; 
     rewrite /SCB(.*) $1 break; 
     proxy_pass https://yy.yy:443; 
    } 
} 
+0

發佈您的nginx配置 –

+0

對於xx.xx服務器 服務器{ listen 443; server_name xx.xx; ssl on; ssl_certificate /etc/xx.cert.pem; ssl_certificate_key /etc/xx.key; location_ ^/SCB /(.*)$ {proxy_set_header X-SSL-CERT $ ssl_client_cert; 重寫/SCB(.*)$ 1 break; proxy_pass https://yy.yy:443; } } –

+0

發佈有問題,而不是評論。並且發佈雙方配置 –

回答

0

後端服務器正在生成400錯誤,因爲它從不收到任何客戶端證書。所有傳入的SSL會話都將在反向代理處終止。反向代理然後創建一個新的會話連接到後端。通常,代理在嘗試連接時不會發送客戶端證書,因此您的錯誤。

如果要強制執行與到位反向代理後端客戶端證書驗證,您可以使用指令proxy_ssl_certificateproxy_ssl_certificate_key,並proxy_ssl_verify反向代理服務器上。這將使代理使用自己的客戶端證書對後端進行身份驗證。這與支持接收和驗證原始客戶端證書不同,因爲它們不會連接到後端。

如果您需要將原始客戶端證書信息傳遞到後端,可以通過在連接到後端時在請求標頭中發送變量$ssl_client_cert來實現。 This page有一個使用各種證書屬性的示例。請注意,這與驗證原始客戶端證書的後端仍然不同,但可以用於類似的效果,假設後端信任反向代理,反之亦然。

目前,後端服務器無法在反向代理後驗證原始客戶端證書。這不是Nginx(或Apache)的限制,而是由於SSL在使用客戶端證書身份驗證時的工作原理。