带有HTTP 4.1.1的ClientCustomSSL

时间:2011-07-01 22:00:14

标签: java https httpclient keystore apache-httpclient-4.x

有人可以告诉我是否必须创建my.keystore文件或者是否会创建它。当我在我的jsp文件所在的同一目录(webapp目录)中创建此文件时,我在我的jsp文件中使用此代码。

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);

我收到了错误

java.io.FileNotFoundException: my.keystore (The system cannot find the file spec
ified)

那么我应该把这个文件放在哪里。这是文件,即jsp文件和my.keystore

的路径
C:\workspace\search-ui\search-ui\src\main\webapp

2 个答案:

答案 0 :(得分:0)

我建议将密钥库添加到类路径中,然后通过

加载它
InputStream instream = Thread.currentThread().getContextClassLoader().getResourceAsStream("my.keystore");

将密钥库置于webapp下但不在WEB-INF下是不安全的,因为任何人都可以下载它。此外,当使用相对文件路径时,通过new File()加载文件会查找Java进程的工作目录(请参阅JavaDoc)。这很可能位于您正在使用的Servlet容器的目录层次结构下。

答案 1 :(得分:0)

除非您的服务器需要客户端身份验证,否则根本不需要密钥库。是吗?