我是否应该为 REST API 的使用者提供客户端证书?



我有一个REST API,它通过HTTPS使用JWT持有者身份验证。SSL 证书安装在托管我的 REST API 的 Web 服务器上。我是否需要向想要使用我的 API 的不同应用程序(用户(提供客户端证书,以便使用我提供给他们的客户端证书在他们的服务器和我的服务器之间进行握手。

我尝试从我的机器本地运行的 python 脚本调用我用 C# 开发的 HTTPS REST API,但我必须将验证标志指定为 False 或ssl.CERT_NONE才能成功

调用
import requests
requests.get('some https url', verify=False)

我知道我们也可以使用自签名证书。我担心中间人攻击,如果他们用verify=False调用我的端点,如果有人尝试在他的应用程序中使用我的 API,该应用程序正在通过 https 生产,我是否需要给他握手的客户端证书,或者他的应用程序将能够调用我的 https api 端点,而无需我专门提供客户端证书。

我试图从这个问题中获取一些线索,但它并没有解释其应用程序尝试通过https调用我的端点的不同用户如何能够使用我的rest api执行握手

任何指导将不胜感激。

快速回答:确保您的私钥文件安全,您不会有任何问题。

长答案与解释非对称加密以及如何在TLS握手中实现有关。当客户端打开与您的服务器的 HTTPS 连接时,会来回发送一系列请求:

  1. 客户端发送问候
  2. 服务器发回 HELLO 包括服务器 SSL 证书
  3. 客户端使用证书颁发机构验证证书
  4. 客户端发回使用服务器公钥加密的随机字节串
  5. 服务器使用私钥解密字符串

在最后一步之后,将在客户端和服务器之间创建会话。为了使中间人攻击成功,"中间人"需要将您的私钥和刚刚描述的每个操作代理回您的服务器,否则其中一个步骤将失败,客户端将在他们的浏览器中收到"服务器未验证"错误警告他们连接不安全。

这是对该过程的非常简短的解释,您可以在此处进行更多阅读

最新更新