相关疑难解决方法(0)

Trust Store与Key Store - 使用keytool创建

我知道密钥库通常会保存私钥/公钥,信任存储只保存公钥(并代表您打算与之通信的可信方列表).嗯,这是我的第一个假设,所以如果这不正确,我可能还没有开始......

我对使用keytool时如何/何时区分商店感兴趣.

所以,到目前为止,我已经创建了一个密钥库

keytool -import -alias bob -file bob.crt -keystore keystore.ks
Run Code Online (Sandbox Code Playgroud)

这将创建我的keystore.ks文件.我回答yes问题我是否相信bob但是我不清楚这是否创建了密钥库文件或信任库文件?我可以设置我的应用程序以使用该文件.

-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x
Run Code Online (Sandbox Code Playgroud)

并且使用System.setProperty( "javax.net.debug", "ssl")set,我可以在受信任的证书下看到证书(但不在密钥库部分下).我导入的特定证书只有一个公钥,我打算用它通过SSL连接向Bob发送内容(但也许最好留给另一个问题!).

任何指示或澄清都将非常感激.无论你导入什么,keytool的输出都是相同的,它的惯例是一个是密钥库而另一个是信任存储?使用SSL等时的关系是什么?

java ssl jce keytool

239
推荐指数
4
解决办法
22万
查看次数

.keystore文件和.jks文件之间的区别

我试图找到.keystore文件和.jks文件之间的区别,但我找不到它.我知道jks是"Java密钥库",两者都是存储键/值对的方法.

是否有任何差异或偏好使用一个而不是另一个?

keystore jks

206
推荐指数
3
解决办法
24万
查看次数

java SSL和cert密钥库

我的java程序如何知道包含证书的密钥库在哪里?或者,我如何告诉我的java程序在哪里查找密钥库?

以某种方式指定密钥库后,如何指定用于向客户端验证服务器的证书?

java keystore

156
推荐指数
5
解决办法
39万
查看次数

通过HTTPS/SSL的Java客户端证书

我正在使用Java 6,并尝试HttpsURLConnection使用客户端证书创建针对远程服务器.
服务器使用自签名根证书,并要求提供受密码保护的客户端证书.我已将服务器根证书和客户端证书添加到我在/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/security/cacerts(OSX 10.5)中找到的默认java密钥库中.密钥库文件的名称似乎表明客户端证书不应该进入那里?

无论如何,将根证书添加到这个商店解决了臭名昭着的问题 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed' problem.

但是,我现在仍然坚持如何使用客户端证书.我尝试了两种方法,并没有让我到任何地方.
首先,首选,尝试:

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
URL url = new URL("https://somehost.dk:3049");
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setSSLSocketFactory(sslsocketfactory);
InputStream inputstream = conn.getInputStream();
// The last line fails, and gives:
// javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
Run Code Online (Sandbox Code Playgroud)

我试过跳过HttpsURLConnection类(不理想,因为我想与服务器谈论HTTP),而是这样做:

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("somehost.dk", 3049);
InputStream inputstream = sslsocket.getInputStream();
// do anything with the inputstream results in:
// java.net.SocketTimeoutException: Read timed out
Run Code Online (Sandbox Code Playgroud)

我甚至不确定客户端证书是否存在问题.

java ssl jsse sslhandshakeexception

114
推荐指数
5
解决办法
38万
查看次数

标签 统计

java ×3

keystore ×2

ssl ×2

jce ×1

jks ×1

jsse ×1

keytool ×1

sslhandshakeexception ×1