确保 Stunnel 中的 TLSv1.2?
Ensuring TLSv1.2 in stunnel?
请耐心等待,因为我可能对创建证书以实现 TLS 连接缺乏一些了解。
我正在尝试建立从客户端到服务器加密的 TLSv1.2 连接。
我已经在客户端创建了自己的 CA 证书和 CSR,并继续签署客户端。
在客户端生成 CSR 并使用 CA 证书签名后:
- 客户端-cert.pem
- 客户端-csr.pem
- 客户端-key.pem
使用的命令:
- openssl req -nodes -newkey rsa:4096 -keyout client-key.pem -out client-csr.pem
- openssl verify -CAfile ca-cert.pem client-cert.pem
在服务器端,我还创建了一个 CSR 并用我自己的 CA 对其进行了签名:
- 服务器-cert.pem
- 服务器-key.pem
在服务器端,创建 CA 证书并签署客户端证书后:
- ca-cert.pem
- ca-cert.srl
- ca-key.pem
使用的命令:
- openssl req -x509 -newkey rsa:4096 -days 3650 -keyout ca-key.pem -out ca-cert.pem
- openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
- openssl verify -CAfile ca-cert.pem client-cert.pem
所以在我的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
- 我的配置有问题吗?
- 我是否在服务器端和客户端都缺少更多配置?
- 如果我关闭验证,验证 = 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
请耐心等待,因为我可能对创建证书以实现 TLS 连接缺乏一些了解。
我正在尝试建立从客户端到服务器加密的 TLSv1.2 连接。 我已经在客户端创建了自己的 CA 证书和 CSR,并继续签署客户端。
在客户端生成 CSR 并使用 CA 证书签名后:
- 客户端-cert.pem
- 客户端-csr.pem
- 客户端-key.pem
使用的命令:
- openssl req -nodes -newkey rsa:4096 -keyout client-key.pem -out client-csr.pem
- openssl verify -CAfile ca-cert.pem client-cert.pem
在服务器端,我还创建了一个 CSR 并用我自己的 CA 对其进行了签名:
- 服务器-cert.pem
- 服务器-key.pem
在服务器端,创建 CA 证书并签署客户端证书后:
- ca-cert.pem
- ca-cert.srl
- ca-key.pem
使用的命令:
- openssl req -x509 -newkey rsa:4096 -days 3650 -keyout ca-key.pem -out ca-cert.pem
- openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
- openssl verify -CAfile ca-cert.pem client-cert.pem
所以在我的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
- 我的配置有问题吗?
- 我是否在服务器端和客户端都缺少更多配置?
- 如果我关闭验证,验证 = 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