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

一半火、curl介紹

curl,全稱CommandLine URL 或 CommandLine Uniform Resource Locator蛾娶,顧名思義敦腔,curl命令是在命令行方式下工作,利用URL的語(yǔ)法進(jìn)行數(shù)據(jù)的傳輸或者文件的傳輸胞谭。

curl是基于URL語(yǔ)法在命令行方式下工作的文件傳輸工具垃杖,它支持FTP,F(xiàn)TPS丈屹,HTTP调俘,HTTPS,GOPHER泉瞻,TELNET脉漏,DICT,F(xiàn)ILE及LDAP等協(xié)議袖牙。curl支持HTTPS認(rèn)證侧巨,并且支持HTTP的POST,PUT等方法,F(xiàn)TP上傳鞭达,kerberos認(rèn)證司忱,HTTP上傳,代理服務(wù)器畴蹭,cookies坦仍,用戶名/密碼認(rèn)證,通過http代理服務(wù)器上傳文件到FTP服務(wù)器等等叨襟,功能十分強(qiáng)大繁扎。

# yum -y install curl

# curl -V

# yum info curl?

# yum info libcurl

二、關(guān)于https證書

https是在SSL協(xié)議之上實(shí)現(xiàn)的http協(xié)議糊闽,握手過程如下:

單向認(rèn)證模式:

對(duì)于面向公眾用戶的https的網(wǎng)站梳玫,大部分屬于這種,它不需要對(duì)客戶端進(jìn)行認(rèn)證右犹,不需要提供客戶端的個(gè)人證書提澎。

雙向認(rèn)證模式:

為了驗(yàn)證客戶端的合法性,要求客戶端在訪問服務(wù)器時(shí)念链,出示自己的被授權(quán)過的客戶端證書盼忌。


單向認(rèn)證模式與雙向認(rèn)證模式的區(qū)別积糯,就在于第⑤、第⑥步是否要求對(duì)客戶的身份認(rèn)證谦纱,單向不需要認(rèn)證看成,雙向需要認(rèn)證。

目前跨嘉,大公司的OA管理系統(tǒng)(俗稱內(nèi)網(wǎng))绍昂,安全性要求較高,通常采用https的雙向認(rèn)證模式偿荷。


curl對(duì)HTTPS的支持是通過?--cacert, --capath, --with-ca-bundle??等參數(shù)來(lái)對(duì)HTTPS加以支持窘游。

curl的官方文檔:http://curl.haxx.se/docs/sslcerts.html?,講解了如何導(dǎo)入CA的具體方法跳纳,以及使用CA的方法忍饰。

其中--with-ca-bundle可以用環(huán)境變量CURL_CA_BUNDLE(LINUX下)或curl-ca-bundle.crt(WINDOWS下可搜索到該文件)來(lái)實(shí)現(xiàn)默認(rèn)指定。

如果在Linux下開發(fā)應(yīng)用的話寺庄,可以借助curl這個(gè)命令行工具艾蓝,它提供命令行操作方式、libcurl庫(kù)函數(shù)使用方式斗塘。

通過IE或其他瀏覽器訪問HTTPS服務(wù)器我們可以很容易得到SSL的X.509安全證書赢织,證書導(dǎo)出可以選擇編碼格式,我們通常選擇DER或者BASE64編碼方法馍盟,導(dǎo)出文件為cer后綴于置。


對(duì)于openssl生成crt證書文件時(shí)-inform參數(shù)會(huì)有區(qū)別,如對(duì)DER編碼文件命令應(yīng)該是:

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

其中test-der.cer是瀏覽器里導(dǎo)出的x.509證書文件贞岭,?test-der.crt是加密CA證書被curl所需加載驗(yàn)證的八毯。


如果導(dǎo)出用BASE64編碼導(dǎo)出的,則命令行應(yīng)該改為:

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

其中 -inform參數(shù)需要改為PEM瞄桨,來(lái)對(duì)應(yīng)編碼格式BASE64话速。


另外,X.509證書如果是三層以上的芯侥,即除了底層的URL外泊交,上面還有兩層以上的,則說明該證書是一個(gè)證書夾柱查,即便里面只有一個(gè)證書廓俭,用在curl時(shí)需作為--capath的參數(shù)值代入才能生效; 反之物赶,如果只有兩層的白指,即除了底層的URL外留晚,上面只有一層的酵紫,則說明該證書只是一個(gè)證書告嘲,用在curl里需作為--cacert里的參數(shù)值才能生效。


證書在curl里能被通過必須具備以下三個(gè)條件:

1奖地、被CA簽證過的證書橄唬;

2、期限有效的参歹;

3仰楚、URL能匹配請(qǐng)求。

其中第三個(gè)可以用過hosts添加ip-name對(duì)來(lái)實(shí)現(xiàn)欺騙犬庇,如果服務(wù)器的SSL證書屬于復(fù)制使用的話僧界。


用curl訪問https網(wǎng)址的命令:

#?curl? -k? ?https://www.xxxcom

其中-k的目的就是讓curl不對(duì)服務(wù)器的https證書認(rèn)證。



三臭挽、關(guān)于如何使用curl來(lái)訪問雙向認(rèn)證的https站點(diǎn)

1捂襟、首先,因?yàn)橐M(jìn)行客戶端認(rèn)證欢峰,你應(yīng)該具有了客戶端的個(gè)人證書(對(duì)于公司內(nèi)網(wǎng)葬荷,通常是由IT的管理員頒發(fā)給你的),只要你能夠順利的訪問雙向認(rèn)證的https站點(diǎn)纽帖,你就具有了個(gè)人證書宠漩,它藏在瀏覽器上。我們要做的工作懊直,只是把它從瀏覽器中導(dǎo)出來(lái)扒吁。

IE瀏覽器導(dǎo)出來(lái)的格式,通常為.pfx格式室囊,從firefox導(dǎo)出來(lái)的格式通常為.p12格式瘦陈,其實(shí)pfx=p12,它們是同一個(gè)東西波俄,對(duì)于curl而言這種格式稱為PKCS#12文件晨逝。

2、把p12格式轉(zhuǎn)換為pem格式(假設(shè)你的p12文件名為:test.p12):

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

//客戶端個(gè)人證書的公鑰

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

//客戶端個(gè)人證書的私鑰

你也可以轉(zhuǎn)換為公鑰與私鑰合二為一的文件:

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

在執(zhí)行過程中懦铺,可能需要你輸入導(dǎo)出證書時(shí)設(shè)置的密碼捉貌。

執(zhí)行成功后,我們就有了這些文件:client.pem—客戶端公鑰冬念,key.pem—客戶端私鑰趁窃,或者二合一的all.pem。

3.??執(zhí)行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急前,是不對(duì)服務(wù)器的證書進(jìn)行檢查醒陆,這樣就不必關(guān)心服務(wù)器證書的導(dǎo)出問題。


四裆针、關(guān)于用curl訪問SSL加密網(wǎng)站問題


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


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


curl默認(rèn)使用“捆綁的”證書頒發(fā)機(jī)構(gòu)(CA)和公鑰(CA證書)來(lái)執(zhí)行SSL的證書驗(yàn)證刨摩。

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

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

? CApath: none

如果是默認(rèn)值捆綁文件不夠用寺晌,您可以使用 --cacert 選項(xiàng) 指定備用文件。

如果此HTTPS服務(wù)器使用由CA表示的CA簽名的證書捆綁澡刹,證書驗(yàn)證可能因證書問題(可能已過期呻征,或名稱可能已過期,與URL中的域名不匹配)而失敗罢浇。

如果您想關(guān)閉curl對(duì)證書的驗(yàn)證陆赋,請(qǐng)使同-k(或--insecure)選項(xiàng)。


1. 使用 -k?(或--insecure)選項(xiàng)??

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


2. 獲取目標(biāo)服務(wù)器的證書嚷闭,不使用?-k?(或--insecure)選項(xiàng)

# 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


關(guān)于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進(jìn)行安全滲透測(cè)試

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協(xié)議之http狀態(tài)碼詳解

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胞锰,隨后出現(xiàn)的幾起案子阵子,更是在濱河造成了極大的恐慌,老刑警劉巖胜蛉,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挠进,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡誊册,警方通過查閱死者的電腦和手機(jī)领突,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)案怯,“玉大人君旦,你說我怎么就攤上這事〕凹睿” “怎么了金砍?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)麦锯。 經(jīng)常有香客問我恕稠,道長(zhǎng),這世上最難降的妖魔是什么扶欣? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任鹅巍,我火速辦了婚禮,結(jié)果婚禮上料祠,老公的妹妹穿的比我還像新娘骆捧。我一直安慰自己,他們只是感情好髓绽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布敛苇。 她就那樣靜靜地躺著,像睡著了一般顺呕。 火紅的嫁衣襯著肌膚如雪枫攀。 梳的紋絲不亂的頭發(fā)上括饶,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音脓豪,去河邊找鬼。 笑死忌卤,一個(gè)胖子當(dāng)著我的面吹牛扫夜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驰徊,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼笤闯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了棍厂?” 一聲冷哼從身側(cè)響起颗味,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牺弹,沒想到半個(gè)月后浦马,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡张漂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年晶默,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片航攒。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡磺陡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出漠畜,到底是詐尸還是另有隱情币他,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布憔狞,位于F島的核電站蝴悉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瘾敢。R本人自食惡果不足惜辫封,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廉丽。 院中可真熱鬧倦微,春花似錦、人聲如沸正压。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)焦履。三九已至拓劝,卻和暖如春雏逾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背郑临。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工栖博, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厢洞。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓仇让,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親躺翻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丧叽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容