在我工作的公司中,我正在WebSphere 6.1服务器上开发Web应用程序。我正在编写的Web应用程序必须通过使用具有相互身份验证的SSL连接来连接到外部公司。

首先要说的是:我对这样的事情有点菜鸟,对不起,如果我会说些愚蠢的话:)

我有公共证书和私人证书。我已将私有证书添加到NodeDefaultKeyStore,并将公共证书链添加到NodeDefaultTrustStore。然后,我看到服务器具有同时封装KS和TS的SSL配置,并且该配置链接到我正在其上运行应用程序的节点。

作为客户端库,我使用的是HttpClient 4.2.3。我这样创建了HttpClient

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");

    // e) SETUP SSL
    SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSystemSocketFactory();

    Scheme httpsScheme = new Scheme("https", HTTPS_PORT, sslSocketFactory);
    Scheme httpScheme = new Scheme("http", HTTP_PORT, PlainSocketFactory.getSocketFactory());

    final SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(httpScheme);
    schemeRegistry.register(httpsScheme);

    PoolingClientConnectionManager connManager = new PoolingClientConnectionManager(schemeRegistry);


    // f) CREAZIONE CLIENT HTTP
    HttpClient httpClient = new DefaultHttpClient(sslSocketFactory);


    // g) CREAZIONE DEL PROXY (possibile che venga disattivato)
    Resources res = new Resources();
    String proxyHost = res.get(PROXY_HOST);
    int proxyPort = Integer.parseInt(res.get(PROXY_PORT));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);

    httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    System.setProperty("java.net.useSystemProxies", "false");

    // ######################## ==> CHIAMATA AD INPS
    HttpResponse resp = httpClient.execute(httpPost);


我已经看过SSLSocketFactory,并且不包含我指定的证书。我已经看到SSLSOcketFactory.getSystemSocketFactory()只是读取javax.ssl.xxxxx属性来初始化用于SSL连接的KS和TS。

所以...我必须将服务器配置链接到我的应用程序,但是我不确定如何以“适当的”方式进行配置:我可以在运行时使用System.setProperty设置此类属性,但是我认为这不是进行此类工作的好方法。有什么方法可以从应用程序引用SSL配置(也许通过JNDI)吗?还是最好的方法是配置两个链接到KS和TS文件的URL并手动配置SSLSocketFactory?

预先感谢您的答复!
洛伦佐

最佳答案

由于已将证书添加到NodeDefault存储中,因此我认为根本不需要在代码中进行任何手动SSL设置。您可能需要做的唯一另一件事是将目标主机添加到SSL certificate and key management> Dynamic outbound endpoint SSL configurations,然后选择要用于该目标的客户端证书别名。

关于java - 为即将进行的SSL调用配置WebSphere服务器的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18319197/

10-08 20:46