我正在尝试向运行带有自签名 SSL 证书的开发站点的本地开发服务器之一发出 curl 请求。我正在从命令行使用 curl。
我看到一些博客文章提到您可以添加到证书列表或指定一个特定的(自签名)证书为有效,但是是否有一种“不验证”ssl 证书的通用方式 - 就像--no-check-certificate那个wget有吗?
Fre*_*eit 766
是的。从联机帮助页:
-k, --不安全
(TLS) 默认情况下,curl 建立的每个 SSL 连接都经过验证是安全的。此选项允许 curl 继续和操作,即使服务器连接被认为是不安全的。
通过确保服务器的证书包含正确的名称并使用证书存储成功验证来验证服务器连接。
有关更多详细信息,请参阅此在线资源: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...
Run Code Online (Sandbox Code Playgroud)
ken*_*orb 45
您可以使用以下命令对所有连接应用更改:
$ echo insecure >> ~/.curlrc
Run Code Online (Sandbox Code Playgroud)
在Windows上刚刚创建_curlrc以“不安全的”它在你的文本的文本文件%HOME%,%CURL_HOME%,%APPDATA%,%USERPROFILE%或%USERPROFILE%\Application Data目录。
使用上述解决方案的优点是它适用于所有curl命令,但不推荐使用,因为它可能通过连接到不安全和不受信任的主机而引入MITM 攻击。
小智 12
您正在使用自签名证书。为什么不将 CA 附加到受信任的 CA 包 (Linux) 或添加到受信任的证书存储区 (Windows)?或者简单地--cacert /Path/to/file与您信任的自签名证书文件的内容一起使用。
其他答案是根据wget可比性回答问题。然而,真正的问题是我如何使用curl. 根据许多评论,安全是这些答案中任何一个的首要问题,最好的答案是信任自签名证书并curl保持安全检查不变。
添加到user3258557的答案中,假设您需要使用自己的根 CA 等测试自己的一些假服务器。而且您只是不想使用 curl 的-k选项。
首先,让我们为您的根 CA 创建一个 RSA 密钥:
openssl genrsa -des3 -out rootCA.key 4096
Run Code Online (Sandbox Code Playgroud)
然后,使用该密钥,让我们为自己的 CA 签署一个证书:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
Run Code Online (Sandbox Code Playgroud)
现在,您有一个带有私钥和证书的根 CA。
现在让我们为我们自己的网站生成密钥和证书:
openssl genrsa -out mainsite.net.key 2048
Run Code Online (Sandbox Code Playgroud)
现在,在创建证书之前,我们首先需要一个证书签名请求 (CSR)。然后我们的根 CA 将“签署”CSR 并为我们的网站生成证书。
openssl req -new -key mainsite.net.key -out mainsite.net.csr
Run Code Online (Sandbox Code Playgroud)
让我们最终为我们的网站创建证书:
openssl x509 -req -in mainsite.net.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out mainsite.net.crt -days 500 -sha256
Run Code Online (Sandbox Code Playgroud)
为了便于使用,让.pem我们使用我们的.crt和.key文件生成一个文件:
cat mainsite.net.key mainsite.net.crt > mainsite.net.pem
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用此.pem文件运行一个简单的服务器。说这个服务器运行在127.0.0.1:12345
对于 curl 请求,您可以这样做:
curl --cacert "rootCA.crt" https://127.0.0.1:12345/
Run Code Online (Sandbox Code Playgroud)
更进一步,如果您想使用 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/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
824404 次 |
| 最近记录: |