使用Curl的HTTPS连接
Contents
1. 概述
curl 是一个命令行工具,支持许多 Web 协议,例如 HTTPS。
在本教程中,我们将了解如何使用curl调用 HTTPS 端点。
2. 受信任的 CA 签名 SSL 证书
与 curl 一起使用的最简单语法是curl URL。让我们使用curl发出请求以调用 HTTPS 端点:
curl https://www.blogdemo.com
在这种情况下,curl 发出GET请求并返回页面源而没有任何错误,因为服务器使用Trusted CA Signed SSL Certificates。这意味着服务器正在使用由可信机构签署的证书。
3. 自签名证书
有时,如果服务器使用的是自签名证书,我们在发出 curl 请求时会遇到错误*“SSL 证书问题:自签名证书”* 。这意味着服务器未使用由可信机构签署的证书。
假设我们正在运行一个 配置了 TLS 的本地Spring Boot 项目。
处理此问题的一种方法是强制 curl 忽略证书验证,使用*-k*或 –insecure 标志:
curl -k https://localhost:8443/blogdemo
但是,忽略 HTTPS 错误可能非常不安全。相反,另一种选择是使用来自我们尝试访问的服务器的证书。
3.1. 获取服务器证书
当我们使用单向SSL 调用 HTTPS 端点时,客户端使用它可用的证书验证接收服务器证书。因此,我们需要将共享服务器证书保存在客户端中。
要检索服务器证书列表,我们将使用带有*-showcerts*参数的OpenSSL 命令:
openssl s_client -showcerts -connect <Domain Name or IP Address>:<Port>
-showcerts选项打印出完整的证书链。我们可以将证书保存到文件中以调用端点:
openssl s_client -showcerts -connect https://localhost:8443/blogdemo </dev/null | sed -n -e '/-.BEGIN/,/-.END/ p' > blogdemo.pem
3.2. 调用 HTTPS 端点
要调用 HTTPS 端点,我们将首先使用OpenSSL命令或密钥库文件从本地服务器保存服务器证书blogdemo.pem。
然后我们将在curl请求中使用服务器证书以及*–cacert*选项:
curl --cacert blogdemo.pem https://localhost:8443/blogdemo