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

本文深入解析HTTPS双向认证模式的概念与过程,并提供使用curl命令访问需要双向认证的HTTPS站点的具体步骤,包括从浏览器导出个人证书、转换证书格式、选择合适的curl命令参数等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

### Docker与Consul的集成关系 Docker 是一种轻量级虚拟化技术,用于创建和管理容器环境;而 Consul 则是一个分布式服务发现和服务网格工具,能够提供健康检查、键值存储以及多数据中心网络等功能。两者的结合可以实现动态的服务注册与发现机制。 #### 安装 Registrator 并将其连接至 Consul 为了使 Docker 容器能够在启动时自动向 Consul 注册其服务信息,在停止时又能自动注销这些信息,通常会使用 Gliderlabs 的 Registrator 工具[^1]。以下是具体操作: ```bash docker run -d \ --name=registrator \ --net=host \ -v /var/run/docker.sock:/tmp/docker.sock \ --restart=always \ gliderlabs/registrator:latest \ -ip=192.168.153.60 \ consul://192.168.153.40:8500 ``` 上述命令中的 `-ip` 参数指定了宿主机 IP 地址,该地址会被用来对外暴露容器端口。`consul://192.168.153.40:8500` 表明了 Consul 服务器的位置及其监听端口号。 #### 验证服务轮询功能 当多个实例部署在同一组负载均衡器后面时,可以通过访问不同路径来验证请求是否被均匀分配给各个节点。例如通过浏览器或者 curl 命令多次调用 `http://<load_balancer_ip>:<port>/` 来观察返回结果的变化情况[^2]。 对于单独查看某个特定容器的日志输出,则可以直接利用如下指令完成: ```bash docker logs -f test-01 docker logs -f test-02 docker logs -f test-03 ``` 这里假设我们有三个分别命名为test-01,test-02,test-03的应用程序正在运行当中,并且它们都已成功加入到了由Consul维护的服务列表里去。 #### 创建并发布HTTP服务示例 下面给出了一条简单的命令行脚本片段,它展示了怎样快速搭建起一个基于Apache Web Server镜像的小型站点项目。 ```bash docker run -itd -p 82:80 --name test-2 -h test2 httpd ``` 这条语句将会以后台模式开启一个新的进程,同时映射本地机器上的82号TCP通道到新产生的名为'test-2'的新建web server内部默认开放出来的80端口中[^3]。 #### 初始化设置Consul客户端软件包 最后一步就是准备好必要的依赖项文件夹结构之后再解压官方二进制分发版得到最终可执行档名叫做‘consul’的东西放到全局搜索路径下即可立即生效启用版本查询命令确认安装无误结束整个流程描述环节[^4]: ```bash mkdir /opt/consul && cd $_ unzip consul_0.9.2_linux_amd64.zip mv consul /usr/local/bin/ consul version ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值