java - 为即将到来的 SSL 调用配置 WebSphere 服务器的正确方法

标签 java ssl ssl-certificate websphere-6.1

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

首先要说的是:我对这些事情有点菜鸟,如果我要说一些愚蠢的话,我很抱歉:)

我有公共(public)证书和私有(private)证书。我已将私有(private)证书添加到 NodeDefaultKeyStore,并将公共(public)证书链添加到 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 证书和 key 管理 > 动态出站端点 SSL 配置 并选择您要用于该目的地的客户端证书别名。

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

相关文章:

java java.lang.outofmemoryerror : java heap space

java - Gson toJson 方法在打印字符串时包含转义字符

圆括号中的 Java 正则表达式

nginx - 两层 NGINX 反向代理,第二层带有 ssl_client_verify

javax.net.ssl.SSLProtocolException : handshake alert: unrecognized_name on java 1. 8

ssl - 仅验证域所有者的 ssl 证书是否会删除浏览器警告消息?

java - 使用 Http-Client 上传大文件

c# - 使用 rackspace 托管负载均衡器后面的自托管 Web API 获取客户端 IP

apache - 将 HTTP 请求重定向到 HTTPS 的推荐方法

Android 通配符 SSL 验证