是否可以制作一个程序,该程序只使用公钥和私钥进行客户端证书身份验证(我没有生成任何证书,我只有公钥和私钥)。
简单地说,我想使用客户端证书身份验证在服务器上进行身份验证。但是,以编程方式制作客户端证书是很困难的。
我希望只使用公钥和私钥进行客户端证书身份验证(我只有公钥和私钥,没有证书)。
。
发布于 2013-08-03 19:45:33
证书只是带有附加上下文的公钥。密钥的名称、签名、使用指南等等。SSL/TLS取决于该上下文。否则,您连接的主机将不知道密钥是否真正属于您。SSL信任机制基于显式信任证书的概念,然后是它们签署的隐式可信证书。
但是,如果您没有使用SSL或TLS,那么没有SSL或TLS的加密仍然可能发生,但是信任必须以不同的方式发生。SSH就是一个很好的例子: SSH仍然使用公钥和私钥,但是由于没有签名的层次结构,证书提供的添加的信息不会很有用,所以密钥是单独发送的。相反,客户端询问是否在服务器第一次连接时信任它的公钥,然后每次检查公钥是否与它上次看到的公钥匹配。这可能是因为SSH不使用SSL或TLS进行加密。
但是,如果您使用的是SSL协议,则协议要求必须向公钥显示证书的添加上下文。也就是说,证书是必须放置公钥以供SSL使用的容器。
如果您拥有私钥,那么使用像OpenSSL这样的工具创建一个自签名证书是非常简单的。
发布于 2013-08-04 13:44:47
SSL/TLS使用证书支持客户端身份验证。真正在内部发生的是:
CertificateRequest消息请求“客户端证书”。Certificate消息发送,并计算握手中前面所有消息的签名(使用其私钥);签名以CertificateVerify消息的形式发送。然而,在协议本身中,证书被交换为不透明的字节块;每个“证书”都用指定长度的3字节头发送。因此,如果同时控制服务器和客户端代码,则完全由您来决定如何解释这些字节块。您不需要发送X.509证书。如果你愿意的话,你可以发送一个空的消息。
重要的一点仍然是:
现有的SSL实现可能至少坚持遵守X.509格式,在这种情况下,您必须用某种自签名的X.509证书包装您的公钥,这在一些库(如OpenSSL )中相对容易编程。
有一个标准用于用OpenPGP公钥替换OpenPGP中的X.509证书,展示了SSL固有的格式灵活性。
发布于 2013-08-03 21:46:48
除了我们亲爱的朋友泰勒尔
您应该了解OpenSSL linux命令,并且有很好的PHP或perl编程技巧。(特别是PHP)这里有一些很好的指南: 1-http://www.php.net/manual/en/book.openssl.php和2-openssl。org您必须对openssl命令及其功能有深入的了解。
最后:(您的问题)是否可以发送服务器公钥而不是客户证书进行客户证书认证?不,因为您可能会忘记TLS握手协议,它一步一步地显示客户端服务器的身份验证和密钥交换。http://msdn.microsoft.com/en-us/library/windows/desktop/aa380513%28v=vs.85%29.aspx
https://security.stackexchange.com/questions/40016
复制相似问题