在Curl命令中使用客户端证书

时间:2015-07-08 23:07:23

标签: linux curl https certificate request-headers

卷曲命令:

curl -k -vvvv --request POST --header "Content-Type: application/json" --cert client.pem:password --key key.pem "https://test.com:8443/testing"

我正在尝试使用上面指定的Curl命令发送客户端证书。我想知道以下内容:

  1. 我应该在服务器端查看从HTTP请求中提取客户端证书的HTTP请求标头是什么。

  2. 如果我无法从HTTP请求中提取服务器端的客户端证书,我是否可以在HTTP请求中添加自定义请求标头,并将客户端证书作为该自定义标头的值发送。如果有人能为我提供这种方法的一个例子,那就太好了。

2 个答案:

答案 0 :(得分:75)

我就这样做了:

curl -v \
  --cacert ./ca.pem \
  --key ./admin-key.pem \
  --cert ./admin.pem \
  https://xxxx/api/v1/

答案 1 :(得分:22)

不在HTTP标头中发送TLS客户端证书。它们由客户端作为TLS 握手的一部分传输,服务器通常也会在握手期间检查证书的有效性。

如果接受证书,则可以将大多数Web服务器配置为添加标头,以便将证书或证书中包含的信息传输到应用程序。环境变量使用ApacheNginx中的证书信息填充,可以在其他指令中用于设置标题。

作为此方法的示例,以下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