【问题标题】:Issue with understanding keystore and ssl理解密钥库和 ssl 的问题
【发布时间】:2015-09-05 10:21:33
【问题描述】:

这些是事实:

我有一个 client(android)-server(java - Ubuntu 14.04)-program,通过它我每 5 分钟从我的智能手机传输我的 gps-data 到服务器将其保存到 mysql 数据库中。

我的问题是我不想直接传输我的 GPS 数据。所以我想使用 SSL 来验证客户端(我的智能手机)到服务器(使其他人无法连​​接到服务器 - 没有握手),当然还有加密。 我的主要问题是关于理解密钥库、信任库过程。

keytool.exe -genkey -keyalg RSA -keysize 2048 -alias -serverKey -keystore serverKeystore.jks -validity 1095

我正在创建一个名为 serverKeystore.jks 的新密钥库(如果不存在)。此密钥库包括证书包装的私钥和公钥。 我可以用

导出证书

-keytool.exe -export -alias serverKey -keystore serverKeystore.jks -file server.cer

因此,他现在根据this 教程创建了一个客户端密钥库:

keytool -genkey -keyalg RSA -alias clientKey -keystore clientkeystore.jks -validity 999 -keysize 2048

我导出 client.cer 的方式与之前导出服务器的方式相同。

现在他将 server.cer 添加到 clients-keystore 并将 clients.cer 添加到 servers-keystore。但是现在 serverKeystore 和 clientKeystore 已经创建了不同的私钥/公钥对。服务器现在知道客户端公钥,客户端现在知道服务器公钥。 这样,客户端可以用服务器的公钥加密明文,然后服务器可以用他的私钥解密。这是正确的吗? 如果是这样,信任库在哪里?信任库是存储 client.cer 的服务器密钥库,并且以这种方式信任此客户端,反之亦然?

【问题讨论】:

    标签: java android ssl encryption


    【解决方案1】:

    现在他将 server.cer 添加到 clients-keystore,并将 clients.cer 添加到服务器的 keystore。

    这里错了。在每种情况下,您都应该将导出的证书添加到 truststore。从服务器密钥库导出到客户端信任库,从客户端密钥库导出到服务器信任库。

    这样,客户端可以使用服务器的公钥加密明文,然后服务器可以使用他的私钥对其进行解密。这是正确的吗?

    理论上是正确的,但不是这样使用的。 SSL 协商一个对称会话密钥。证书及其密钥仅用于身份验证,不用于加密。

    如果是这样,信任库在哪里?

    见上文。

    【讨论】:

    • 谢谢。但是,如果我得到两个信任库,其中一个包含 server.cer,另一个包含 client.cer,那么下一步是什么。如何将它们与能够建立安全连接的服务器程序和客户端程序结合使用?我不是在谈论实现 SSLServerSocketFactory 并在服务器端创建 SSLServerSocket。这对我来说很清楚,但是如何将这两个信任库引入游戏呢?
    • 您可以按照 JSSE 参考指南中的说明配置它们。
    • 你不说! ;) 问题是我不理解该指南...我希望有一个小教程或快速解释的链接,因为我很难理解这个主题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2018-09-10
    • 2011-08-17
    • 1970-01-01
    • 2013-01-02
    • 2015-05-30
    相关资源
    最近更新 更多