gpt4 book ai didi

java - SSL websockets 代理通过带有客户端身份验证的 nginx 代理

转载 作者:行者123 更新时间:2023-11-30 10:52:08 24 4
gpt4 key购买 nike

我在通过 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) 的客户端上,我使用此行将客户端证书导入到 keystore 中:

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

此过程适用于自签名服务器证书。该故障在客户端上报告为无法切换协议(protocol),这与我之前代表 SSL 握手的失败一致 - 代理的应用程序仅为 websocket。

最佳答案

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

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

关于java - SSL websockets 代理通过带有客户端身份验证的 nginx 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34470547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com