这些是事实:
我有一个客户端(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的服务器密钥库,并且信任该客户端,反之亦然吗?
答案 0 :(得分:0)
现在,他将server.cer添加到clients-keystore,将clients.cer添加到服务器的密钥库。
这里错了。您应该在每种情况下将导出的证书添加到 truststore 。从服务器密钥库导出到客户端信任库,客户端密钥库导出到服务器信任库。
这样客户端可以使用服务器的公钥加密明文,然后服务器可以用他的私钥解密它。这是对的吗?
理论上它是正确的,但它并没有这样使用。 SSL协商对称会话密钥。证书及其密钥仅用于身份验证,而不用于加密。
如果是这样,信任库在哪里?
见上文。