2015-12-26 52 views
2

我无法通过nginx设置具有客户端证书身份验证的websocket应用程序的反向代理;到目前为止,我已经获得了服务器SSL证书的正常工作。这里是我到此为止了客户端验证:通过nginx代理与客户端身份验证的SSL websockets代理

创建客户端证书:

openssl req -new -x509 -days 365 -key ca.key -out ca.crt 
openssl genrsa -out client.key 1024 
openssl req -new -key client.key -out client.csr 
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey \ 
    ca.key -set_serial 01 -out client.crt 

配置nginx的:

daemon off; 
events { 
    worker_connections 4096; 
} 

http { 
    map $http_upgrade $connection_upgrade { 
    default upgrade; 
    '' close; 
    } 

    server { 
    listen 443; 
    ssl on; 
    server_name rserve; 

    ssl_certificate /etc/nginx/certs/server.crt; 
    ssl_certificate_key /etc/nginx/certs/server.key; 
    # ssl_client_certificate /etc/nginx/certs/ca.crt; 
    # ssl_verify_client on; 

    location/{ 
     proxy_pass http://localhost:8081; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 
    } 
} 

如果启用SSL客户端的东西的事情停止工作。在我使用的是码头实现(JAVA)的客户,我输入端证书到密钥库中与这条线:

keytool -import -trustcacerts -keystore keystore.jks \ 
    -storepass changeit -noprompt -alias client -file client.crt 

此过程工作了自签名证书的服务器。在客户端上报告失败是因为交换协议失败,这与我以前代表SSL握手的失败一致 - 被代理的应用程序仅仅是websocket。

回答

1

您在密钥库之外创建了私钥,现在只导入了证书。客户端应用程序需要访问私有和公共部分。

或者import the private key或使用keytool而不是openssl生成证书签名请求。