【curl】How To Use Curl with HTTPS Protocol and URLS?

一、curl介绍

curl,全称CommandLine URL 或 CommandLine Uniform Resource Locator,顾名思义,curl命令是在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。

curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST,PUT等方法,FTP上传,kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

# yum -y install curl

# curl -V

# yum info curl 

# yum info libcurl

二、关于https证书

https是在SSL协议之上实现的http协议,握手过程如下:

单向认证模式:

对于面向公众用户的https的网站,大部分属于这种,它不需要对客户端进行认证,不需要提供客户端的个人证书。

双向认证模式:

为了验证客户端的合法性,要求客户端在访问服务器时,出示自己的被授权过的客户端证书。


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

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


curl对HTTPS的支持是通过 --cacert, --capath, --with-ca-bundle  等参数来对HTTPS加以支持。

curl的官方文档:http://curl.haxx.se/docs/sslcerts.html ,讲解了如何导入CA的具体方法,以及使用CA的方法。

其中--with-ca-bundle可以用环境变量CURL_CA_BUNDLE(LINUX下)或curl-ca-bundle.crt(WINDOWS下可搜索到该文件)来实现默认指定。

如果在Linux下开发应用的话,可以借助curl这个命令行工具,它提供命令行操作方式、libcurl库函数使用方式。

通过IE或其他浏览器访问HTTPS服务器我们可以很容易得到SSL的X.509安全证书,证书导出可以选择编码格式,我们通常选择DER或者BASE64编码方法,导出文件为cer后缀。


对于openssl生成crt证书文件时-inform参数会有区别,如对DER编码文件命令应该是:

#  openssl   x509   -inform  DES   -in   test-der.cer   -text   -out  test-der.crt

其中test-der.cer是浏览器里导出的x.509证书文件, test-der.crt是加密CA证书被curl所需加载验证的。


如果导出用BASE64编码导出的,则命令行应该改为:

# openssl  x509  -inform  PEM   -in test-b64.cer  -text  -out  test-b64.crt

其中 -inform参数需要改为PEM,来对应编码格式BASE64。


另外,X.509证书如果是三层以上的,即除了底层的URL外,上面还有两层以上的,则说明该证书是一个证书夹,即便里面只有一个证书,用在curl时需作为--capath的参数值代入才能生效; 反之,如果只有两层的,即除了底层的URL外,上面只有一层的,则说明该证书只是一个证书,用在curl里需作为--cacert里的参数值才能生效。


证书在curl里能被通过必须具备以下三个条件:

1、被CA签证过的证书;

2、期限有效的;

3、URL能匹配请求。

其中第三个可以用过hosts添加ip-name对来实现欺骗,如果服务器的SSL证书属于复制使用的话。


用curl访问https网址的命令:

# curl  -k   https://www.xxxcom

其中-k的目的就是让curl不对服务器的https证书认证。



三、关于如何使用curl来访问双向认证的https站点

1、首先,因为要进行客户端认证,你应该具有了客户端的个人证书(对于公司内网,通常是由IT的管理员颁发给你的),只要你能够顺利的访问双向认证的https站点,你就具有了个人证书,它藏在浏览器上。我们要做的工作,只是把它从浏览器中导出来。

IE浏览器导出来的格式,通常为.pfx格式,从firefox导出来的格式通常为.p12格式,其实pfx=p12,它们是同一个东西,对于curl而言这种格式称为PKCS#12文件。

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

# openssl   pkcs12   -in test.p12   -out   client.pem  -nokeys

//客户端个人证书的公钥

# openssl  pkcs12  -in  test.p12  -out  key.pem  -nocerts  -nodes

//客户端个人证书的私钥

你也可以转换为公钥与私钥合二为一的文件:

#   openssl pkcs12   -in   testp12   -out all.pem   -nodes

在执行过程中,可能需要你输入导出证书时设置的密码。

执行成功后,我们就有了这些文件:client.pem—客户端公钥,key.pem—客户端私钥,或者二合一的all.pem。

3.  执行curl命令

使用client.pem+key.pem

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

使用all.pem

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

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


四、关于用curl访问SSL加密网站问题


# curl -v -I https://www.baidu.com


# curl -v -I https://192.168.1.101:8443


curl默认使用“捆绑的”证书颁发机构(CA)和公钥(CA证书)来执行SSL的证书验证。

* Initializing NSS with certpath: sql:/etc/pki/nssdb

*  CAfile: /etc/pki/tls/certs/ca-bundle.crt

  CApath: none

如果是默认值捆绑文件不够用,您可以使用 --cacert 选项 指定备用文件。

如果此HTTPS服务器使用由CA表示的CA签名的证书捆绑,证书验证可能因证书问题(可能已过期,或名称可能已过期,与URL中的域名不匹配)而失败。

如果您想关闭curl对证书的验证,请使同-k(或--insecure)选项。


1. 使用 -k (或--insecure)选项  

# curl -v -I https://192.168.1.101:8443 -k


2. 获取目标服务器的证书,不使用 -k (或--insecure)选项

# keytool  -printcert  -sslserver  192.168.1.101:8443  -rfc  >  /etc/pki/ca-trust/source/anchors/test.crt

# cat   /etc/pki/ca-trust/source/anchors/test.crt



# update-ca-trust

# curl  -v  -I  https://192.168.1.101:8443

# curl   -v   -I  --cacert /etc/pki/ca-trust/source/anchors/test.crt   https://192.168.1.101:8443


五、参考


How To Use Curl with HTTPS Protocol and URLS?

https://www.poftut.com/how-to-use-curl-with-https-protocol-and-urls/

https connection using CURL from command line

https://stackoverflow.com/questions/10079707/https-connection-using-curl-from-command-line


SSL Certificate Verification

https://curl.haxx.se/docs/sslcerts.html

CA certificates extracted from Mozilla

https://curl.haxx.se/docs/caextract.html


关于curl访问https的若干问题

https://blog.csdn.net/q553716434/article/details/39500467


Sending API requests using cURL

https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAB/Developers/GettingStarted/API%20requests/curl-requests.htm


利用curl进行安全渗透测试

https://www.freebuf.com/column/164233.html


curl  --insecure option

https://curl.haxx.se/mail/archive-2017-08/0023.html

https://github.com/curl/curl/pull/1821

https://stackoverflow.com/questions/8520147/curl-insecure-option


HTTP协议之http状态码详解

https://blog.csdn.net/hzw05103020/article/details/47276005

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容