卷曲命令:
curl -k -vvvv --request POST --header "Content-Type: application/json" --cert client.pem:password --key key.pem "https://test.com:8443/testing"
我正在尝试使用上面指定的Curl命令发送客户端证书。我想知道以下内容:
我应该在服务器端查看从HTTP请求中提取客户端证书的HTTP请求标头是什么。
如果我无法从HTTP请求中提取服务器端的客户端证书,我是否可以在HTTP请求中添加自定义请求标头,并将客户端证书作为该自定义标头的值发送。如果有人能为我提供这种方法的一个例子,那就太好了。
答案 0 :(得分:75)
我就这样做了:
curl -v \
--cacert ./ca.pem \
--key ./admin-key.pem \
--cert ./admin.pem \
https://xxxx/api/v1/
答案 1 :(得分:22)
不在HTTP标头中发送TLS客户端证书。它们由客户端作为TLS 握手的一部分传输,服务器通常也会在握手期间检查证书的有效性。
如果接受证书,则可以将大多数Web服务器配置为添加标头,以便将证书或证书中包含的信息传输到应用程序。环境变量使用Apache和Nginx中的证书信息填充,可以在其他指令中用于设置标题。
作为此方法的示例,以下Nginx配置代码段将验证客户端证书,然后设置Parse.Cloud.httpRequest({
method: 'DELETE',
url: 'https://api.stripe.com/v1/customers/' + request.params.stripeId + '/subscriptions/' + request.params.stripeSubscriptionId,
headers: {
'Authorization': 'Basic BASE_64_ENCODE_SECRET_KEY'
},
params: {
at_period_end: true
},
success: function(httpResponse) {
...
},
error: function(httpResponse) {
...
}
});
标头以将整个证书传递给应用程序。当证书成功验证后,这将仅设置,因此应用程序可以解析证书并依赖它所带来的信息。
SSL_CLIENT_CERT