![使用curl进行单向ssl](https://linux22.com/image/1539977/%E4%BD%BF%E7%94%A8curl%E8%BF%9B%E8%A1%8C%E5%8D%95%E5%90%91ssl.png)
我知道有很多主题和文章,但是我真的在这个问题上绞尽脑汁。
-k
我有一个在 TLS 上运行的 NodeJS 实例。我需要另一台服务器使用 cURL 连接到它。遗憾的是,由于我使用的 cURL 版本的限制,我无法做到这一点。
因此我需要连接时没有证书警告。
我的想法是这样的:
1. to generate a cert
2. generate a certificate signing request
3. acquire the CA
4. sign the certificate with the CA
5. Configure NodeJS to send the CA, Cert, and Key during handshakes
6. Have the requesting server do a cURL command, specifying the certificate in the command.
这有什么意义吗?还是这太倒退了?我很难区分它的每个部分。
谢谢,
编辑
因此,根据回复,我显然不知道自己在做什么。如果我可以获得 CA、公钥和私钥的副本。那么我该怎么做?请详细说明。
答案1
不幸的是,由于我使用的 cURL 版本的限制,我无法执行 -k。
从一开始,这就是错误的方法。-k
它禁用对服务器证书的任何验证,从而使中间人攻击变得容易,也就是说,它允许 https 想要防止的事情发生。
- 配置 NodeJS 以在握手期间发送 CA、证书和密钥
- 让请求服务器执行 cURL 命令,在命令中指定证书。
我不太确定您在这里想要实现什么,但如果我理解正确的话,您想在服务器端生成一个证书,然后将该证书发送到客户端,以便它将来可以检查该证书。
这种方法的问题在于,您需要保护从服务器到客户端的新创建的证书的发送。否则,中间人只需将证书与攻击者创建的证书进行交换,从而继续进行无法检测到的中间人攻击。
不幸的是,你的问题描述了尝试解决一个未知问题(见XY问题)。执行 SSL 的常用方法是拥有一个客户端已经信任的证书颁发机构 (CA) 和一个由该 CA 颁发的证书。在大多数情况下,会使用像 Let's Encrypt 这样的公共 CA,因为这些 CA 已经受到客户端的信任(随操作系统或浏览器一起提供)。您的问题没有解释为什么您不能采用这种既定方式,而是需要发明自己的解决方案。