我正在尝试向运行带有自签名SSL证书的开发站点的我们的本地开发服务器之一发出curl请求。我从命令行使用curl。用各种方式说“不验证” ssl证书-就像wget拥有的--no-check-certificate一样?

评论

如果您具有特定版本的php或apache(如superuser.com/questions/1015325/…中所述),--insecure将不起作用。

#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/