【问题标题】:SSL websockets proxy via nginx proxy with client auth通过带有客户端身份验证的 nginx 代理的 SSL websockets 代理
【发布时间】:2016-03-31 22:43:18
【问题描述】:

我在通过 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 客户端,事情就会停止工作。在我使用码头实现(java)的客户端上,我使用以下行将客户端证书导入密钥库:

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

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

【问题讨论】:

    标签: java ssl nginx https proxy


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 2020-08-16
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2017-10-07
      • 1970-01-01
      相关资源
      最近更新 更多