gpt4 book ai didi

SSL 客户端证书认证

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:37 24 4
gpt4 key购买 nike

是否可以制作一个仅使用公钥和私钥使用客户端证书身份验证的程序(我没有生成任何证书,我只有公钥和私钥)。

很简单,

我想在服务器上使用客户端证书身份验证进行身份验证。但是很难以编程方式制作客户端证书。

我想只用公钥和私钥进行客户端证书认证(我只有公钥和私钥,没有证书)。

是否可以发送服务器公钥而不是客户端证书来进行客户端证书认证?

最佳答案

TLS 协议(protocol)只允许交换证书,不允许交换原始公钥。甚至“PGP key ”(如果你想用 OpenPGP for authentication in TLS 替换 X.509,它的支持要少得多)实际上是证书(它们是公钥和一组标识符和属性的签名组合)。

话虽如此,您可以使用自签名客户端证书并依赖其公钥执行客户端身份验证(但您需要根据您的服务器已经知道的内容验证此公钥,例如已知列表 )。您需要先了解实现此功能的安全隐患。这与自签名服务器证书的问题不太一样。 (我建议保留一种更传统的方法来验证服务器证书。)

您可以让客户端发送自签名证书(可能使用 certain tricks regarding the CA list advertised by the server )并在 TLS 堆栈或稍后在应用程序中执行验证。

请注意,许多应用程序容器(例如 Java 中的 Tomcat/Jetty)期望 SSL/TLS 层验证客户端证书。因此,如果您在那里跳过身份验证(并且更愿意稍后在容器内或作为应用程序的一部分进行),许多应用程序框架将会混淆。在您的应用程序中执行任何需要身份验证的操作之前,您需要非常小心地确保身份验证确实在某处执行。

例如,拥有一个允许任何客户端证书在 Tomcat/Jetty 中通过的信任管理器可能没问题,但您不能依赖 javax.servlet.request.X509Certificate以任何方式验证请求属性(大多数框架会以其他方式进行验证)。您需要在您的应用程序中实现一些验证逻辑:例如,在任何经过​​身份验证的功能之前有一个过滤器,该过滤器将此客户端证书中的公钥与您已知的公钥列表进行比较(或者您希望将公钥匹配到标识符)。或者,您也可以在自定义信任管理器(使用 Java)中执行此验证,这将减少应用程序中的工作量。

您可以在 Apache Httpd + PHP 设置中做类似的事情(例如),使用 SSLVerifyClient optional_no_ca .同样,您的 PHP 应用程序不能依赖已验证的证书,因此您也必须在那里实现验证。

除非您了解您获得的证书信息在哪个阶段已经过验证,否则不要执行任何操作。

关于SSL 客户端证书认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18036469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com