我正在尝试用 sardine 制作一个 webdav 客户端,但它没有连接到我的 https 服务器。在使用指南中说这个关于 ssl http://code.google.com/p/sardine/wiki/UsageGuide#SSL但我不知道如何为我的自定义 Http 客户端提供我的 keystore 。
我收到这个错误。
Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:941) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:919) at com.googlecode.sardine.impl.SardineImpl.execute(SardineImpl.java:684) at com.googlecode.sardine.impl.SardineImpl.list(SardineImpl.java:339) at com.googlecode.sardine.impl.SardineImpl.getResources(SardineImpl.java:326) at sardine.main(sardine.java:15)
如何设置?
非常简单的示例(适用于 http://mydrive.net 和 Linux):
- 使用 OpenSSL 从 mydrive.net 下载证书
- openssl s_client -connect webdav.mydrive.ch:443 > mydrive.net.crt
- 删除 mydrive.net.crt 文件中除 BEGIN 和 END(含)之间的所有内容
- 生成一个新的 keystore :
- keytool -genkey -alias dummy -keyalg RSA -keystore/etc/ssl/certs/java/yourKeyStore.jks -keysize 2048
- 使用安全密码
- 删除未使用的生成证书
- keytool -delete -alias dummy -keystore/etc/ssl/certs/java/yourKeyStore.jks
- 从 mydrive.net 导入证书
- keytool -import -trustcacerts -alias mydrive.net -keystore/etc/ssl/certs/java/kyourKeyStore.jks -file ./mydrive.net.crt
- 验证导入:
- keytool -list -keystore/etc/ssl/certs/java/yourKeyStore.jks
- 为 keystore 添加 Java 参数
- JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=/etc/ssl/certs/java/yourKeyStore.jks"
- 重启 JVM
现在您可以在不覆盖或重新实现方法的情况下使用 Sardine。只需使用
Sardine sardine = SardineFactory.begin(username, password);
List<DavResource> resources = sardine.list("https://webdav.mydrive.ch/");
提示:确保使用正确的证书。例如,MyDrive 有几个证书
我是一名优秀的程序员,十分优秀!