gpt4 book ai didi

ssl - 400 错误请求 : The SSL certificate error

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:42 26 4
gpt4 key购买 nike

当我尝试使用此命令获取包含客户端 key 和证书的页面时出现此错误:

curl -v -s --key /home/dmitry/Downloads/client_cert/client.mysite.key --cert /home/dmitry/Downloads/client_cert/client.mysite.crt https://mysite.com/api/login/

这是我在 nginx 日志中看到的内容:

2014/12/08 06:30:55 [crit] 13087#0: *404 SSL_do_handshake() failed (SSL: error:14094085:SSL routines:SSL3_READ_BYTES:ccs received early) while SSL handshaking, client: xxx.xxx.xxx.xxx, server: 0.0.0.0:443

这是我的 nginx.conf 的一部分:

server {
listen 443 ssl;

ssl_certificate /home/mysite/conf/dev/ssl/com.mysite.crt;
ssl_certificate_key /home/mysite/conf/dev/ssl/com.mysite.key;
ssl_client_certificate /home/mysite/conf/dev/ssl/com.mysite.crt;
ssl_verify_client optional;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

server_name mysite.com www.mysite.com;
access_log /home/mysite/logs/nginx_access.log;
error_log /home/mysite/logs/nginx_error.log;

location /api/{
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;

proxy_set_header SSL-client-serial $ssl_client_serial;
proxy_set_header SSL-client-dn $ssl_client_s_dn;
proxy_set_header SSL-client-verify $ssl_client_verify;

if ($ssl_client_verify != SUCCESS) {
return 403;
break;
}
}
}

以下是我用来创建客户端证书的命令:

openssl req -out client.mysite.csr -new -newkey rsa:2048 -nodes -keyout client.mysite.key
openssl x509 -req -days 3650 -in client.mysite.csr -CA com.mysite.crt -CAkey com.mysite.key -set_serial 01 -out client.mysite.crt

这里可能有什么问题?我应该使用其他证书作为我的客户端证书而不是服务器证书的 CA 吗?

更新:

当我这样做

openssl verify -CAfile com.mysite.crt client.mysite.crt

我得到:

error 20 at 0 depth lookup:unable to get local issuer certificate

最佳答案

首先,在nginx.conf中启用调试日志:

error_log  logs/error.log debug;

然后重启nginx。然后重复请求并检查日志文件。找到带有verify:0的第一行:

2019/12/05 22:34:50 [debug] 5980#9776: *17 verify:0, error:20, depth:0, subject:"/CN=...", issuer:"/CN=..."

在这里你看到error:20。错误代码来自 OpenSSL。 Here你可以通过代码和here找到常量名称通过常量名对应的描述。

或者,您可以使用 openssl 命令行工具验证证书:

openssl verify -CAfile ca.crt client.crt

要在服务器看到它时对其进行验证,ca.crt 必须是 ssl_client_certificate 中列出的文件或 中的 ssl_trusted_certificate 指令>nginx.conf.

要自行验证证书,ca.crt 必须是用于签署 client.crt 的证书。如果它是自签名的,它将是 client.crt 本身(client.crt 将连续两次)。

如果您收到错误 20 并且您的客户端证书是自签名的,您可能遇到了 this bug .要修复它,您应该从证书中完全删除 keyUsage 或将 keyCertSign 添加到列表中。要验证您是否偶然发现了它,请检查以下命令的输出中的 X509v3 extensions: 部分是否列出了 Key Usage:

openssl x509 -in client.crt -text -noout

关于ssl - 400 错误请求 : The SSL certificate error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27467930/

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