目前,大公司的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,是不对服务器的证书进行检查,这样就不必关心服务器证书的导出问题了。

转载于:https://www.cnblogs.com/mtcnn/p/9410088.html

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

  1. SpringBoot的SSL个人CA签发二级证书(动态添加客户端证书)

    SpringBoot的SSL个人CA签发二级证书(动态添加客户端证书) 2018年07月10日 17:09:09 得谷养人 阅读数:388 当我们的服务端部署完成运行起来之后,trustStore信任 ...

  2. HttpClient 忽略证书直接访问https站点

    使用HttpClient访问https 站点时,如果Java没有导入该站点的证书的话,则会报如下错误: javax.net.ssl.SSLHandshakeException: sun.securit ...

  3. HttpClient 使用证书访问https站点

    使用HttpClient访问https 站点时,如果JRE或者JDK没有导入某个站点的证书,则会报如下错误: javax.net.ssl.SSLHandshakeException: sun.secu ...

  4. Spring RestTemplate 访问https站点

    RestTemplate 是Spring对HttpClient的封装, API的调用和结果的解析更简单了.举例来说,访问一个站点并获取结果的代码只需要两行代码就可以了,类似: String url = ...

  5. curl+个人证书访问https站点

    目前,大公司的OA管理系统(俗称内网),安全性要求较高,通常采用https的双向 认证模式. 首先,什么是https,简单的说就是在SSL协议之上实现的http协议(get.post等操作) 什么是双 ...

  6. IIS 使用OpenSSL 生成的自签名证书,然后使用SingalR 客户端访问Https 站点通信

    使用SignalR 的客户端去发送消息给使用 https 部署的站点,官方文档目前并没有详细的教程,所以在此记录下步骤: 使用管理员身份打开cmd 窗口,选择一个整数保存文件夹的地址,切换到对应的文件 ...

  7. php curl 加载证书,php curl请求时,设置客户端证书及私钥

    因为之前没有接触到https双向认证,所以有点陌生. 因为ssl证书和私钥都是对接方提供的,我的理解如下: ssl证书携带了客户端的公钥, 对方服务器使用客户端的私钥验证,再用服务端的公钥加密返回 客 ...

  8. OpenSSL命令大全,CA证书生成,客户端证书生成实例

    1.X509证书链 x509证书一般会用到三类文件,key,csr,crt. Key是私用密钥,openssl格式,通常是rsa算法. csr是证书请求文件,用于申请证书.在制作csr文件的时候,必须 ...

  9. 用curl访问HTTPS站点并登录

    开发网站,少不了测试.现在的网站为了加强安全性,都启用了HTTPS协议.所谓HTTPS,也就是HTTP文本在SSL协议中传输.用curl命令行来测试HTTPS站点是个很有用的功能,写点脚本,就可以做功 ...

最新文章

  1. unix下网络编程之I/O复用(二)
  2. python学习-练习题9*9乘法表巩固
  3. mvn spring-boot:run 增加jvm启动参数
  4. gpedit msc组策略面板 win10在哪里_windows10的组策略在哪
  5. Java作业08 计科1501 闫国雨
  6. 禁用 Bootstrap 模态框(Modal) 点击空白时自动关闭
  7. 在装有windows跟ubuntu的机器上重新安装windows后修复ubuntu的grub
  8. 动态加载下拉框select options 如何设置默认选中
  9. latex审阅时添加行号
  10. 分析 PPTV 视频真实播放地址全过程(Java版)
  11. 【企业】读纸牌屋,把握人性
  12. html中如何定义斜框,html表格单元格添加斜下框线的方法
  13. 《天下无贼》经典台词与遗憾
  14. vue之push() pop() shift() unshift() splice() sort() reverse()等等
  15. 智慧零售企业向服务升级进行时,全面实时监控成重点
  16. 最近工作中遇到的问题和解决
  17. 45个超实用网站,超强整理!外贸人收藏
  18. python中wb什么意思,使用Python,“ wb”在此代码中是什么意思?
  19. SLAM笔记(七)回环检测中的词袋BOW
  20. 判断是否为USD格式

热门文章

  1. linux usb xhci ehci,ehci和xhci有什么区别
  2. vim 命令_Vim 操作命令手册
  3. 信息竞赛进阶指南--递归法求中缀表达式的值,O(n^2)(模板)
  4. 数学--数论--HDU6919 Senior PanⅡ【2017多校第九场】
  5. 数学--数论--同余及其性质(超详细)
  6. 【Tensorflow】tf.map_fn() 使用过程中遇到【inf, NaN】报错问题
  7. 【知识蒸馏】ICCV21_Channel-wise Knowledge Distillation for Dense Prediction
  8. 人口预测和阻尼-增长模型_使用分类模型预测利率-第1部分
  9. 银行理财不再保本保息,你还敢买吗?
  10. 不是每一个缺钱的人都能贷款!