相关疑难解决方法(0)

通过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万
查看次数

如何在不设置系统范围属性的情况下将HTTP代理用于JAX-WS请求?

我有一个应用程序需要向Internet上的系统发出SOAP客户端请求,因此需要通过我们的HTTP代理.

可以通过设置系统属性值(如系统属性)来执行此操作:

// Cowboy-style.  Blow away anything any other part of the application has set.
System.getProperties().put("proxySet", "true");
System.getProperties().put("https.proxyHost", HTTPS_PROXY_HOST);  
System.getProperties().put("https.proxyPort", HTTPS_PROXY_PORT);
Run Code Online (Sandbox Code Playgroud)

或者通过设置默认的ProxySelector(也是系统范围的设置):

// More Cowboy-style!  Every thing Google has found says to do it this way!?!?!
ProxySelector.setDefault(new MyProxySelector(HTTPS_PROXY_HOST, HTTPS_PROXY_PORT));
Run Code Online (Sandbox Code Playgroud)

如果其他子系统可能希望通过不同的HTTP代理或没有任何代理访问Web服务器,这些都不是明智的选择.使用the ProxySelector将让我配置哪些连接使用代理,但我必须为巨大的应用程序中的每一件事情弄清楚.

一个合理的API会有一个方法,java.net.Proxy就像java.net.Socket(java.net.Proxy proxy)构造函数那样接受一个对象.这样,必要的设置对于需要设置它们的系统部分是本地的.有没有办法用JAX-WS做到这一点?

我不想设置系统范围的代理配置.

java proxy soap http jax-ws

33
推荐指数
2
解决办法
3万
查看次数

标签 统计

java ×2

http ×1

jax-ws ×1

jsse ×1

proxy ×1

soap ×1

ssl ×1

sslhandshakeexception ×1