有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java密钥库、HttpClient和HTTPS:有人能给我解释一下这段代码吗?

我在努力了解this code发生了什么

KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());        
FileInputStream instream = new FileInputStream(new File("my.keystore")); 
try {
    trustStore.load(instream, "nopassword".toCharArray());
} finally {
    instream.close();
}

SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
Scheme sch = new Scheme("https", socketFactory, 443);
httpclient.getConnectionManager().getSchemeRegistry().register(sch);

我的问题是:

trustStore.load(instream, "nopassword".toCharArray());到底在做什么?通过阅读文档load()将使用一些任意的“nopassword”从输入流(这只是我们刚刚创建的一个空文件)加载密钥库数据。为什么不直接用null作为InputStream参数和空字符串作为密码字段来加载它呢

然后,当这个空密钥库被传递给SSLSocketFactory构造函数时会发生什么?这样的手术结果如何

或者——这只是一个示例,在实际应用程序中,您必须实际放置对现有密钥库文件/密码的引用吗


共 (1) 个答案

  1. # 1 楼答案

    Or is this simply an example where in a real application you would have to actually put a reference to an existing keystore file / password?

    看起来确实如此。HttpClient 4.0.1的二进制或源代码发行版中都没有"my.keystore"文件。要运行这个,您需要创建一个实际的密钥库。可以使用keytoolPortecle

    这个例子向您展示了如何使用不同于JVM默认使用的信任存储($JAVA_HOME/jre/lib/security/cacerts)来处理DefaultHttpClient的这个实例。当SSL站点使用由其内部certificate authority签署的证书时,这非常有用。只有在识别出服务器证书的签名者时,才会建立SSL连接。如果你不熟悉TLS的概念,维基百科上的条目是一个不错的介绍