加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

使用s_client但不是curl的客户端证书访问服务器?

发布时间:2020-12-13 22:56:12 所属栏目:Linux 来源:网络整理
导读:我使用nginx作为我的Web服务器与客户端证书身份验证.配置的相关部分是: ssl_certificate /usr/local/etc/nginx/certs/ssl.crt;ssl_certificate_key /usr/local/etc/nginx/certs/ssl.key;ssl_client_certificate /usr/local/etc/nginx/certs/server_chain.cr
我使用nginx作为我的Web服务器与客户端证书身份验证.配置的相关部分是:

ssl_certificate        /usr/local/etc/nginx/certs/ssl.crt;
ssl_certificate_key    /usr/local/etc/nginx/certs/ssl.key;
ssl_client_certificate /usr/local/etc/nginx/certs/server_chain.crt;
ssl_verify_client on;
ssl_verify_depth 2;

客户端证书由另一台具有来自根CA的证书的服务器签名.即,我想接受具有证书链的客户,如下所示:

CA -> intermediate CA -> client

因此文件server_chain.crt由:

cat intermediate_ca.crt root_ca.crt > server_chain.crt

现在,我可以通过发出命令成功访问服务器:

openssl s_client -connect localhost:443 -tls1 -cert client.crt 
    -key client.key -CApath root_ca.crt -state -debug`

然后键入GET / api

但是,如果我尝试使用以下方法来获得相同的服务:

curl -v -s -k --key client.key --cert client.crt https://localhost/api

我明白了:

<html>
<head><title>400 No required SSL certificate was sent</title></head> 
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx/1.6.0</center>
</body>
</html>

我也无法从安装了客户端证书的Web浏览器访问localhost / api页面.如果我关闭客户端验证,那就有用了.

关于什么是错的任何想法?

解决方法

好的,所以错误与nginx完全无关.原来curl没有在OS X上默认运行ssl的引擎.因此,curl从未向服务器发送任何证书.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读