--no-check-certificate
一样?#1 楼
是。来自联机帮助页:-k,--insecure
(TLS)默认情况下,每个curl建立的SSL连接都经过验证是
安全的。此选项甚至允许对服务器
连接进行卷曲操作,否则将被认为不安全。
通过确保服务器的
证书包含正确的名称并成功验证来验证服务器连接使用
证书存储。
有关更多详细信息,请参见此在线资源:
https://curl.haxx.se/docs/sslcerts.html
另请参见--proxy-insecure和--cacert。
该联机帮助页条目中提到的参考文献描述了
-k
的某些特定行为。使用
curl
从BadSSL.com测试页面的请求可以观察到这些行为。curl -X GET https://wrong.host.badssl.com/
curl: (51) SSL: no alternative certificate subject name matches target host name 'wrong.host.badssl.com'
curl -k -X GET https://wrong.host.badssl.com/
..returns HTML content...
评论
喜欢一个字母短选项的事实
– kizzx2
13年1月20日在9:39
curl配置中有什么方法可以将此选项设置为默认值?
–获胜
16年4月5日在8:48
@Wins,那将是一个可怕的想法。如果您需要重复使用别名,请对它进行修改,这样您就知道它的作用,并且不会意外发送未加密的密码。别名insecure-curl =“ curl -k”
–亚历山大·胡萨(Alexander Huszagh)
16 Dec 5'在15:12
@AlexanderHuszagh在工作中,我只使用来自具有自签名证书的单个服务器上的curl;我从来没有时间要进行完整的证书检查。仅仅因为在大多数情况下某些事情看起来像一个可怕的想法,并不意味着它总是如此。
–丹尼尔·H
17年6月6日在17:59
@DanielH这就是为什么我建议使用别名的原因:这样一来,您便可以清楚地知道它是不安全的,从而为您带来了更多便利。工作流程会发生变化:但是,为了方便而进行安全性交易时,您仍然应该以某种有限的方式知道。
–亚历山大·胡萨(Alexander Huszagh)
17年6月6日在21:49
#2 楼
您可以使用以下命令对所有连接应用更改:$ echo insecure >> ~/.curlrc
在Windows上,只需在
_curlrc
,%HOME%
中创建带有“不安全”文本的%CURL_HOME%
文本文件,%APPDATA%
,%USERPROFILE%
或%USERPROFILE%\Application Data
目录。使用上述解决方案的优点是它适用于所有
curl
命令,但不建议这样做,因为它可能会通过连接到不安全且不受信任的主机而引入MITM攻击。 br />评论
这似乎是个坏建议:禁用所有连接的检查不应该是默认设置,即使您通过按用户配置自己进行设置也是如此。如果您需要取消安全检查,则至少要使其零碎。
–克里斯托弗·舒尔茨(Christopher Schultz)
2014年5月22日在21:07
每当我使用curl时,我都会控制或信任另一端的机器。
–埃里克·哈特福德
2014年9月3日18:00
@EricHartford:嗯,对您有好处,但这仍然不是一个很好的一般建议,恕我直言。例如,当在osx上下载homebrew时,可能会使用curl并最终获得工具的修改版本,因为他盲目地将其启用为默认设置。
–ereOn
14-10-19在3:02
此外,@ EricHartford您确定您始终会做受信任的curl事情吗?您是否曾经运行过互联网上的任何bash安装脚本?当然,您仍然可以在那变黑,但这增加了机会。
– Zlatko
15年5月8日在6:56
这是真正的@EricHartford。先前的消息是其他人冒充我发布的。因为我信任所有机器;-)
– Anand Rockzz
19年7月18日在4:19
#3 楼
您正在使用自签名证书。为什么不将CA附加到受信任的CA捆绑包(Linux)或添加到受信任的证书存储区(Windows)?或者简单地将--cacert /Path/to/file
与可信任的自签名证书文件的内容一起使用。其他答案是根据
wget
的可比性来回答问题的。但是,真正的问题是如何使用curl
与自签名证书维护受信任的连接。根据许多评论,安全是这些答案中任何一个的首要问题,最好的答案是信任自签名证书,并保留curl
的安全检查完整。#4 楼
添加到user3258557的答案中,假设您需要使用您自己的根CA等来测试自己的一些伪造服务器。并且您只是不想使用curl的-k
选项。首先,让我们创建一个RSA您的根CA的密钥:
openssl genrsa -des3 -out rootCA.key 4096
然后,使用该密钥,为我们自己的CA签署证书:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
现在,您有了一个带有私钥的根CA,并且证书。现在让我们为自己的网站生成密钥和证书:
openssl genrsa -out mainsite.net.key 2048
现在,在创建证书之前,我们首先需要一个证书签名请求(CSR)。然后我们的根CA将“签署” CSR并为我们的网站生成证书。
openssl req -new -key mainsite.net.key -out mainsite.net.csr
让我们最终为我们的网站创建证书:
openssl x509 -req -in mainsite.net.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out mainsite.net.crt -days 500 -sha256
为了易于使用,让我们使用以下
.pem
和.crt
文件生成一个.key
文件:cat mainsite.net.key mainsite.net.crt > mainsite.net.pem
现在,您可以使用此
.pem
文件运行一个简单的服务器。假设此服务器在127.0.0.1:12345
上运行对于卷曲请求,您可以执行以下操作:
curl --cacert "rootCA.crt" https://127.0.0.1:12345/
更进一步,如果要使用SNI在端口上托管多个站点,可以为每个站点生成密钥,签署CSR并使用如下所示的curl请求:
curl --resolve subsite1.mainsite.net:12345:127.0.0.1 -X GET --cacert "rootCA.crt" --cert "subsite1.mainsite.net.crt" --key "subsite1.mainsite.net.key" https://subsite1.mainsite.net:12345/
评论
如果您具有特定版本的php或apache(如superuser.com/questions/1015325/…中所述),--insecure将不起作用。