我无法通过nginx将反向代理设置为带有客户端证书身份验证的websocket应用程序;到目前为止,我已经获得服务器SSL证书没有问题。以下是我目前为客户端验证的步骤:
创建客户端证书:
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客户端,那么事情就会停止工作。在客户端我正在使用jetty实现(java),我将客户端证书导入到具有以下行的密钥库中:
keytool -import -trustcacerts -keystore keystore.jks \
-storepass changeit -noprompt -alias client -file client.crt
此过程适用于自签名服务器证书。客户端报告故障是切换协议失败,这与我以前代表SSL握手的失败一致 - 代理的应用程序只是websocket。
答案 0 :(得分:1)
您在密钥库之外创建了私钥,现在只导入了证书。客户端应用程序需要访问私有和公共部分。
import the private key或使用keytool
而不是openssl
生成证书签名请求。