理解密钥库和ssl的问题

时间:2015-06-19 12:23:20

标签: java android ssl encryption

这些是事实:

我有一个客户端(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教程,他现在创建了一个clientkeystore:

  

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的服务器密钥库,并且信任该客户端,反之亦然吗?

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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

  

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

见上文。