Contents

使用Curl的HTTPS连接

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