在客户端和服务器端使用相同的私钥进行SSL连接

时间:2013-02-07 21:44:53

标签: java ssl ssl-certificate

我正在开发一个收集环境信息的电路板,并将其数据发送回单个服务器进行处理。与该服务器的唯一连接将由最终将被放入现场的板卡进行。大部分开发工作已经完成,但现在我想尝试确保所有连接。速度至关重要,因为数据是实时敏感的,并且电路板上有一个相当小的处理器(8Mhz)。由于我对此有如此严格的控制,所以我想在WiFi芯片和接受连接的基于Java的服务器之间共享相同的私钥。这有望允许我通过SSL解密和加密消息,而无需在每次其中一个板连接时进行握手过程。正确的吗?

我一直在试验几天没有运气。但在我深入钻洞之前,我想确保这是可能的。谢谢,任何建议将非常感谢。

1 个答案:

答案 0 :(得分:5)

您似乎对whay SSL / TLS工作感到困惑。

在握手期间,服务器提供其证书(除非使用匿名密码套件)向客户端证明其身份,然后同意共享密钥(通过交换预主秘密)与客户端。握手完成后,只有共享密钥用于加密。 (更多细节here。)

服务器的私钥用于向客户端证明其身份(通过其证书)。这样做的目的是防止MITM攻击。

将服务器的私钥提供给客户端只会允许任何客户端冒充服务器。

您无法真正避免握手,如果您进行多次连续连接,也可以使用会话恢复。 您也可以使用TLS PSK(预共享密钥)密码套件(共享对称密钥,而不是私钥),但它们在Oracle JSSE提供程序中不可用。