curl+个人证书(又叫客户端证书)访问https站点
目前,大公司的OA管理系统(俗称内网),安全性要求较高,通常采用https的双向 认证模式。
首先,什么是https,简单的说就是在SSL协议之上实现的http协议(get、post等操作)。更多的介绍参看这里。
什么是双向认证模式?对于面向公众用户的https的网站,大部分属于单向认证模式,它不需要对客户端进行认证,不需要提供客户端的个人证书,例如https://www.google.com。而双向认证模式,为了验证客户端的合法性,要求客户端在访问服务器时,出示自己的client certificate。
以下,为SSL握手过程:
- ①客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
- ②服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
- ③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
- ④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
- ⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
- ⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
- ⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
- ⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
- ⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
- ⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
单向认证模式与双向认证模式的区别,就在于第⑤、第⑥步是否要求对客户的身份认证。单向不需要认证,双向需要认证。
现在介绍如何使用curl来访问双向认证的https站点。
一、准备工作
1、首先,因为要进行客户端认证,你应该具有了客户端的个人证书(对于公司内网,通常是由IT的管理员颁发给你的),只要你能够顺利的访问双向认证的https站点,你就具有了个人证书,它藏在浏览器上。我们要做的工作,只是把它从浏览器中导出来。从IE浏览器导出来的格式,通常为.pfx格式,从firefox导出来的格式通常为.p12格式,其实pfx=p12,它们是同一个东西,对于curl而言这种格式称为PKCS#12文件。
2、把p12格式转换为pem格式(假设你的p12文件名为:xxx.p12):
- openssl pkcs12 -in xxx.p12 -out client.pem -nokeys #客户端个人证书的公钥
- openssl pkcs12 -in xxx.p12 -out key.pem -nocerts -nodes #客户端个人证书的私钥
- 也可以转换为公钥与私钥合二为一的文件;
- 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站点相关推荐
- SpringBoot的SSL个人CA签发二级证书(动态添加客户端证书)
SpringBoot的SSL个人CA签发二级证书(动态添加客户端证书) 2018年07月10日 17:09:09 得谷养人 阅读数:388 当我们的服务端部署完成运行起来之后,trustStore信任 ...
- HttpClient 忽略证书直接访问https站点
使用HttpClient访问https 站点时,如果Java没有导入该站点的证书的话,则会报如下错误: javax.net.ssl.SSLHandshakeException: sun.securit ...
- HttpClient 使用证书访问https站点
使用HttpClient访问https 站点时,如果JRE或者JDK没有导入某个站点的证书,则会报如下错误: javax.net.ssl.SSLHandshakeException: sun.secu ...
- Spring RestTemplate 访问https站点
RestTemplate 是Spring对HttpClient的封装, API的调用和结果的解析更简单了.举例来说,访问一个站点并获取结果的代码只需要两行代码就可以了,类似: String url = ...
- curl+个人证书访问https站点
目前,大公司的OA管理系统(俗称内网),安全性要求较高,通常采用https的双向 认证模式. 首先,什么是https,简单的说就是在SSL协议之上实现的http协议(get.post等操作) 什么是双 ...
- IIS 使用OpenSSL 生成的自签名证书,然后使用SingalR 客户端访问Https 站点通信
使用SignalR 的客户端去发送消息给使用 https 部署的站点,官方文档目前并没有详细的教程,所以在此记录下步骤: 使用管理员身份打开cmd 窗口,选择一个整数保存文件夹的地址,切换到对应的文件 ...
- php curl 加载证书,php curl请求时,设置客户端证书及私钥
因为之前没有接触到https双向认证,所以有点陌生. 因为ssl证书和私钥都是对接方提供的,我的理解如下: ssl证书携带了客户端的公钥, 对方服务器使用客户端的私钥验证,再用服务端的公钥加密返回 客 ...
- OpenSSL命令大全,CA证书生成,客户端证书生成实例
1.X509证书链 x509证书一般会用到三类文件,key,csr,crt. Key是私用密钥,openssl格式,通常是rsa算法. csr是证书请求文件,用于申请证书.在制作csr文件的时候,必须 ...
- 用curl访问HTTPS站点并登录
开发网站,少不了测试.现在的网站为了加强安全性,都启用了HTTPS协议.所谓HTTPS,也就是HTTP文本在SSL协议中传输.用curl命令行来测试HTTPS站点是个很有用的功能,写点脚本,就可以做功 ...
最新文章
- unix下网络编程之I/O复用(二)
- python学习-练习题9*9乘法表巩固
- mvn spring-boot:run 增加jvm启动参数
- gpedit msc组策略面板 win10在哪里_windows10的组策略在哪
- Java作业08 计科1501 闫国雨
- 禁用 Bootstrap 模态框(Modal) 点击空白时自动关闭
- 在装有windows跟ubuntu的机器上重新安装windows后修复ubuntu的grub
- 动态加载下拉框select options 如何设置默认选中
- latex审阅时添加行号
- 分析 PPTV 视频真实播放地址全过程(Java版)
- 【企业】读纸牌屋,把握人性
- html中如何定义斜框,html表格单元格添加斜下框线的方法
- 《天下无贼》经典台词与遗憾
- vue之push() pop() shift() unshift() splice() sort() reverse()等等
- 智慧零售企业向服务升级进行时,全面实时监控成重点
- 最近工作中遇到的问题和解决
- 45个超实用网站,超强整理!外贸人收藏
- python中wb什么意思,使用Python,“ wb”在此代码中是什么意思?
- SLAM笔记(七)回环检测中的词袋BOW
- 判断是否为USD格式
热门文章
- linux usb xhci ehci,ehci和xhci有什么区别
- vim 命令_Vim 操作命令手册
- 信息竞赛进阶指南--递归法求中缀表达式的值,O(n^2)(模板)
- 数学--数论--HDU6919 Senior PanⅡ【2017多校第九场】
- 数学--数论--同余及其性质(超详细)
- 【Tensorflow】tf.map_fn() 使用过程中遇到【inf, NaN】报错问题
- 【知识蒸馏】ICCV21_Channel-wise Knowledge Distillation for Dense Prediction
- 人口预测和阻尼-增长模型_使用分类模型预测利率-第1部分
- 银行理财不再保本保息,你还敢买吗?
- 不是每一个缺钱的人都能贷款!