确保 Stunnel 中的 TLSv1.2?

Ensuring TLSv1.2 in stunnel?

请耐心等待,因为我可能对创建证书以实现 TLS 连接缺乏一些了解。

我正在尝试建立从客户端到服务器加密的 TLSv1.2 连接。 我已经在客户端创建了自己的 CA 证书和 CSR,并继续签署客户端。

在客户端生成 CSR 并使用 CA 证书签名后:

使用的命令:

在服务器端,我还创建了一个 CSR 并用我自己的 CA 对其进行了签名:

在服务器端,创建 CA 证书并签署客户端证书后:

使用的命令:

所以在我的nginx这边,我是这样配置的。 (流连接)

server {
  listen 10043;
  proxy_ssl on;
  proxy_ssl_protocols TLSv1.2;
  proxy_ssl_session_reuse on;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
  ssl_certificate /etc/nginx/certs/tls_certs/client-cert.pem;
  ssl_certificate_key /etc/nginx/certs/tls_certs/client-key.pem;
  ssl_dhparam /etc/nginx/certs/tls_certs/dhparam.pem;
  access_log /var/log/nginx/lpe-ing.log proxy;
  proxy_pass 123.456.789.123:12345;
}

在我的服务器端点,它正在使用 stunnel,我不确定如何配置 CA 证书。

cert = server-cert.pem
key = server-key.pem
CAfile = ca-cert.pem
verify = 3
sslVersion = all
options = NO_SSLv2
options = NO_SSLv3
options = NO_TLSv1
options = NO_TLSv1.1

[ABC-1]
accept = 12345
connect = localhost:11881
  1. 我的配置有问题吗?
  2. 我是否在服务器端和客户端都缺少更多配置?
  3. 如果我关闭验证,验证 = 0,那么我可以连接。

我在执行此操作时从 stunnel 收到此错误 'openssl s_client -connect localhost:10043 -tls1_2'

CONNECTED(00000003)
write:errno=104

stunnel 日志:

2021.11.01 08:17:05 LOG3[14538:140387789453056]: SSL_accept: 140890C7: error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate

我对Nginx的配置不是很熟悉,不知道你有没有看错。但我可以告诉你你在测试中做错了什么。您已成功测试不允许未经身份验证的客户端连接。 OpenSSL 错误并不总是很清楚,但在这种情况下,来自服务器的消息相当清楚:

ssl3_get_client_certificate:peer did not return a certificate

您已将服务器配置为需要客户端身份验证。但是客户端没有发送证书,因此不会发生客户端身份验证,并且服务器通过关闭连接来拒绝连接尝试。 (TLS 客户端认证是这样工作的:客户端发送一个证书,然后它发送一个签名,证明它知道相应的私钥。)客户端的错误是“connection reset by peer”。

您需要将签名证书和私钥传递给您的客户端。

openssl s_client -connect localhost:10043 -tls1_2 -cert client_cert.pem -key client_key.pem