`

curl+个人证书(又叫客户端证书)访问https站点

阅读更多

目前,大公司的OA管理系统(俗称内网),安全性要求较高,通常采用https的双向 认证模式。

 

首先,什么是https,简单的说就是在SSL协议之上实现的http协议(get、post等操作)。更多的介绍参看这里

 

什么是双向认证模式?对于面向公众用户的https的网站,大部分属于单向认证模式,它不需要对客户端进行认证,不需要提供客户端的个人证书,例如 https://www.google.com。而双向认证模式,为了验证客户端的合法性,要求客户端在访问服务器时,出示自己的client certificate。

 

以下,为SSL握手过程:

 

 

  1. ①客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。  
  2.   ②服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。  
  3.    ③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解 开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继 续进行第四步。  
  4.   ④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。  
  5.   ⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。  
  6.    ⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证 书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通 过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同 的主通讯密码)。  
  7.   ⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。  
  8.   ⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。  
  9.   ⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。  
  10.   ⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。  
 

单向认证模式与双向认证模式的区别,就在于第⑤、第⑥步是否要求对客户的身份认证。单向不需要认证,双向需要认证。

 

现在介绍如何使用curl来访问双向认证的https站点。

一、准备工作

1、首先,因为要进行客户端认证,你应该具有了客户端的个人证书(对于公司内网,通常是由IT的管理员颁发给你的),只要你能够顺利的访问双向认证的 https站点,你就具有了个人证书,它藏在浏览器上。我们要做的工作,只是把它从浏览器中导出来。从IE浏览器导出来的格式,通常为.pfx格式,从firefox导出来的格式通常为.p12格式,其实pfx=p12,它们是同一个东西,对于curl而言这种格式称为PKCS#12文件。

2、把p12格式转换为pem格式(假设你的p12文件名为:xxx.p12):

 

 

  1. openssl pkcs12 -in xxx.p12 -out client.pem -nokeys       #客户端个人证书的公钥  
  2. openssl pkcs12 -in xxx.p12 -out key.pem -nocerts -nodes     #客户端个人证书的私钥  
  3. 也可以转换为公钥与私钥合二为一的文件;  
  4. openssl pkcs12 -in xxx.p12 -out all.pem -nodes                                   #客户端公钥与私钥,一起存在all.pem中  
 

在执行过程中,可能需要你输入导出证书时设置的密码。执行成功后,我们就有了这些文件:client.pem——客户端公钥,key.pem——客户端私钥,或者二合一的all.pem。

 

3、确保你安装的curl版本正确(本人折腾了两天,全因为fedora13下的curl-7.20.1有问题,更新到curl-7.21.0.tar.gz问题解决)。

 

 

 

二、执行curl命令

1、使用client.pem+key.pem

curl -k --cert client.pem --key key.pem https://www.xxxx.com

 

2、使用all.pem

curl -k --cert all.pem  https://www.xxxx.com

 

使用-k,是不对服务器的证书进行检查,这样就不必关心服务器证书的导出问题了。

分享到:
评论

相关推荐

    windows下Curl+Openssl访问https实例

    总之,Windows下的Curl+OpenSSL访问HTTPS实例涉及Curl库的使用、OpenSSL库的链接、HTTPS选项的配置以及HTTP(S)请求的执行。通过理解并实践这样的示例,开发者可以更好地掌握在C++环境中进行安全的HTTPS通信的方法。

    利用openssl和curl库获取https服务端证书

    在这个场景中,我们要探讨如何利用openssl和curl库来获取HTTPS服务端证书,这有助于我们验证服务器的身份和建立安全连接。 首先,openssl是一个强大的安全套接字层密码库,包含了各种主要的密码算法、常用的密钥和...

    curl+openssl x64 debug

    windows x64 debug 支持https的curl+openssl库,博客文章:https://blog.csdn.net/weixin_39766005/article/details/109003194

    linux+curl+lib+include

    linux+curl+lib+include

    Curl+Openssll库.rar

    总之,Curl+Openssl库rar是一个对于需要处理HTTPS请求的开发者极其有价值的资源,它简化了安全网络通信的实现,并提供了稳定可靠的HTTPS连接支持。正确地集成和使用这个库,可以极大地提升应用的安全性和可靠性。

    php-curl+ajax+json数据传输2.0版本

    本文将深入探讨这三者结合在“php-curl+ajax+json数据传输2.0版本”中的应用。 首先,`PHP-cURL` 是一个在PHP中使用的库,它允许开发者通过URL来传输数据,支持多种协议,如HTTP、HTTPS、FTP等。`cURL` 提供了一种...

    curl+openssl编译

    总结,`curl+openssl编译`涉及到的是在Windows环境下,通过下载源代码、配置编译环境、编译`openssl`库,然后编译`curl`并使其与`openssl`集成的过程,以实现对HTTPS协议的支持。这个过程需要对编译原理、网络协议和...

    curl 校验服务器证书代码

    在给定的`curl 校验服务器证书代码`场景中,开发者使用了`libcurl`库,这是一个强大的客户端URL传输库,支持多种协议,包括HTTPS。`libcurl`提供了一种方式来扩展其默认的SSL行为,允许用户自定义证书验证过程。这...

    RS.txt Book+-+Page+Curl+Pro

    Book+-+Page+Curl+Pro.unitypackage

    Curl HTTP客户端源码,用于访问WEB服务器

    Curl是一个著名的开源库,主要用于在命令行下发送HTTP、HTTPS以及其他网络协议的请求。它由丹尼尔·伯格斯格伦(Daniel Stenberg)创建,广泛应用于各种软件项目中,尤其是那些需要进行网络数据传输的场景。Curl源码的...

    lua+curl+pthread(可以请求网络JSON)

    在本项目中,"lua+curl+pthread"的组合是将Lua与cURL库和POSIX线程(pthread)结合使用,实现网络请求和多线程处理JSON数据的功能。 cURL是一个用于传输数据的库,支持多种协议,如HTTP、HTTPS、FTP等。在Lua中,...

    C语言实现https客户端

    C语言实现openssl的https客户端post方法使用,可以传入json字符串的格式,测试的例子,可以使用

    curl封装库 支持http、https和ca证书

    通过HTTPS,开发者可以创建安全的客户端应用,进行加密的数据传输,保护用户隐私和数据安全。它支持各种HTTP方法,如GET、POST、PUT、DELETE等,同时处理重定向、cookies和HTTP头等复杂情况。 2. **CA证书处理**:...

    curl ssl ca根证书

    如果你的系统缺少正确的根证书,`curl` 可能会在尝试访问某些网站时遇到SSL认证问题,表现为错误提示,例如“SSL certificate problem: unable to get local issuer certificate”。 文件 `ca-bundle.crt` 和 `ca...

    E:\daily\202310\1026\利用openssl和curl库获取https服务端证书\利用openssl和curl库

    在本主题中,我们将深入探讨如何利用openssl和curl库来获取HTTPS服务端证书。 首先,openssl是一个强大的安全套接层密码学库,包含了各种各样的加密算法、常用的密钥和证书操作以及SSL协议。在获取HTTPS服务端证书...

    curl+openssl开发库(VS2017x64)

    在IT行业中,网络通信是至关重要的,而`curl`和`openssl`是两个非常关键的开源库,广泛应用于数据传输和网络安全。本项目是关于如何在Visual Studio 2017 64位环境下,利用`curl`和`openssl`进行开发的详细实践。 `...

    lua-cURL访问http/https

    Lua-cURL是一个用于在Lua环境中实现HTTP和HTTPS访问的库,它是基于著名的C语言库cURL构建的。这个库提供了全面的功能,使得Lua脚本能够方便地与Web服务进行交互,比如发送GET、POST请求,处理cookies,上传文件,...

    openssl+curl编译好的库和源码.zip

    这里我们关注的是"openssl+curl编译好的库和源码.zip",这是一个包含预编译的Win32静态库以及源代码的压缩包,特别针对Windows XP系统进行了兼容性优化。让我们深入探讨一下这两个关键组件——OpenSSL和cURL,以及...

    curl + data.zip

    在IT领域,`curl` 和 `Elasticsearch` 是两个重要的工具,它们分别用于命令行数据传输和大规模数据存储与检索。在这个场景中,`curl + data.zip` 提供了一个批量导入数据到 Elasticsearch 的解决方案。下面我们将...

    curl+ssl arm64 armv7.zip

    在这个`curl+ssl arm64 armv7.zip`压缩包中,包含了针对iOS平台的`openssl`和`curl`的静态库,特别针对两种不同的处理器架构:`arm64`和`armv7`。 首先,让我们了解一下`openssl`。`openssl`是一个开源的加密库,...

Global site tag (gtag.js) - Google Analytics