Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为即将到来的SSL调用配置WebSphere服务器的正确方法_Java_Ssl_Ssl Certificate_Websphere 6.1 - Fatal编程技术网

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

Java 为即将到来的SSL调用配置WebSphere服务器的正确方法,java,ssl,ssl-certificate,websphere-6.1,Java,Ssl,Ssl Certificate,Websphere 6.1,在我工作的公司,我正在WebSphere6.1服务器上开发一个web应用程序。我正在编写的web应用程序必须通过使用具有相互身份验证的SSL连接连接到外部公司 首先要说的是:我有点不知道这些事情,如果我说些愚蠢的话,我很抱歉:) 我有公共和私人证书。我已经将私有证书添加到NodeDefaultKeyStore,将公共证书链添加到NodeDefaultTrustStore。然后我看到服务器有一个封装KS和TS的SSL配置,该配置链接到我运行应用程序的节点 作为一个客户端库,我使用的是HttpCli

在我工作的公司,我正在WebSphere6.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

提前感谢您的回复!
Lorenzo

既然您已经将证书添加到NodeDefault存储中,我认为您根本不需要在代码中进行任何手动SSL设置。您可能还需要做的唯一一件事是将目标主机添加到
SSL证书和密钥管理
动态出站端点SSL配置
,然后选择要用于该目标的客户端证书别名。

这种配置可能以某种方式连接到传入呼叫。。。我已尝试调试应用程序和SSLSocketFactory.getSystemSocketFactory();调用将提供一个空的套接字工厂。目前,我正在从文件中加载KS和TS并手动构建sslsocketfactory。我描述的配置适用于传入和传出呼叫。
动态出站端点SSL配置
专门用于指示在启动出站连接时要显示哪些证书。同样,我相信正确配置WebSphere,您根本不需要在应用程序中添加任何支持SSL的代码。我们在没有任何代码的情况下进行出站https连接。我们还没有使用客户端证书,但我很确定这也是由我描述的步骤处理的。它只是不起作用,可能是由于缺少一些配置。如果我有时间调查,我会这样做,但现在我只是想让它以某种方式工作:)现在我从文件中加载KS和TS,并构建我自己的SSLSocketFactory,我只用于该连接。