curl怎么验证服务器证书,使用s_client但不是curl的客户端证书访问服务...
我使用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 \n -key client.key -CApath root_ca.crt -state -debug`
然后键入GET / api
但是,如果我尝试使用以下方法来获得相同的服务:
curl -v -s -k --key client.key --cert client.crt https://localhost/api
我明白了:
400 No required SSL certificate was sent400 Bad Request
我也无法从安装了客户端证书的Web浏览器访问localhost / api页面.如果我关闭客户端验证,那就有用了.
关于什么是错的任何想法?