Websphere App Server 7.0.0.43 - IBM Java 1.6, Apache Wink, клиент Rest TLSv1.2 - PullRequest
0 голосов
/ 27 апреля 2018

Недавно обновленный сервер приложений websphere до TLSv1.2. До этого с TLSv1 мог взаимодействовать с клиентом REST, используя комбинацию javax.ws.rs, org.glassfish.jersey и javax.net.ssl. Не удалось получить работу после обновления TLS на сервере приложений. IBM поручила применить Feature Pack Web 2.0 и взаимодействовать с клиентом REST, используя Apache Wink. Не удалось заставить это решение работать. Ранее Keystore и Truststore были настроены для SSLContext.

        private static  String getClient(String servicePath){
        try {
            javax.ws.rs.client.Client client = null;
            org.glassfish.jersey.client.ClientConfig clientConfig = new org.glassfish.jersey.client.ClientConfig();
            int readTimeOut = Integer.parseInt(commonProp.getProperty(READ_TIMEOUT));
            int connTimeout = Integer.parseInt(commonProp.getProperty(CONNECTION_TIMEOUT));
            clientConfig.property(ClientProperties.CONNECT_TIMEOUT, connTimeout);
            clientConfig.property(ClientProperties.READ_TIMEOUT, readTimeOut);
                org.glassfish.jersey.SslConfigurator sslConfig;
                String trustStoreName = commonProp.getProperty(TRUSTSTORE_NAME);
                File file1 = new File("\\"+PROJECT_FILE_DIR+ "/ISB"+trustStoreName.trim());
                String keyStoreName = commonProp.getProperty(KEYSTORE_NAME);
                File file2 = new File("\\"+PROJECT_FILE_DIR+ "/ISB"+keyStoreName.trim());
                FileInputStream fis1 = new FileInputStream(file1);
                FileInputStream fis2 = new FileInputStream(file2);

                String trustStorePassword = commonProp.getProperty(TRUSTSTORE_PASSWORD);
                String keyStorePassword = commonProp.getProperty(KETSTORE_PASSWORD);
                sslConfig = org.glassfish.jersey.SslConfigurator.newInstance().trustStoreBytes(ByteStreams.toByteArray(fis1))
                        .trustStorePassword(trustStorePassword).keyStoreBytes(ByteStreams.toByteArray(fis2))
                        .keyPassword(keyStorePassword);
                javax.net.ssl.SSLContext sslContext = sslConfig.createSSLContext();
                client = javax.ws.rs.client.ClientBuilder.newBuilder().sslContext(sslContext).withConfig(clientConfig).build();

            String url = commonProp.getProperty(ENDPOINT_URL)+servicePath;
            Response response =
                    client.target(url)
                    .request(MediaType.APPLICATION_JSON)
                    .get();
            String responseAsString = "";
            if(response != null){
                     responseAsString = response.readEntity(String.class);

            }
            return responseAsString;
        } catch (Throwable e) {
            logger.severe(e.getMessage() + e.getLocalizedMessage());
            e.printStackTrace();
            throw new RuntimeException(e);
        }

    }

С установленным пакетом функций и использованием JSSEHELPER, полученный псевдоним SSL информация от WAS. Кажется, чтобы установить соединение с клиентом сейчас, но все еще есть проблема аутентификации

Blockquote код состояния ответа: 200 вызывается close () называется closeInternal (true) WebContainer: 0, SEND TLSv1.2 ALERT: предупреждение, описание = close_notify Попытка аутентификации с помощью сертификата клиента не удалась. Действительный клиент для подключения требуется сертификат. Blockquote

Возможно, проблема в том, что ранее информация о KEYSTORE и TRUSTSTORE был прочитан из файла. Принимая во внимание, что JSSEHELPER просто вводит имя файла.

    com.ibm.ssl.clientAuthenticationSupported = false
com.ibm.ssl.keyStoreClientAlias = isbgatewaytst
com.ibm.ssl.contextProvider = IBMJSSE2
com.ibm.ssl.trustStoreProvider = IBMJCE
com.ibm.ssl.protocol = TLSv1.2
com.ibm.ssl.keyStoreReadOnly = false
com.ibm.ssl.alias = ISBGatewaySSL
com.ibm.ssl.keyStoreCreateCMSStash = false
com.ibm.ssl.securityLevel = CUSTOM
com.ibm.ssl.trustStoreName = ISBGatewayTrust
com.ibm.ssl.configURLLoadedFrom = security.xml
com.ibm.ssl.trustStorePassword = ********
com.ibm.ssl.keyStoreUseForAcceleration = false
com.ibm.ssl.trustManager = PKIX
com.ibm.ssl.validationEnabled = false
com.ibm.ssl.trustStoreInitializeAtStartup = false
com.ibm.ssl.keyManager = IbmX509
com.ibm.ssl.keyStoreFileBased = true
com.ibm.ssl.keyStoreType = JKS
com.ibm.ssl.trustStoreFileBased = true
com.ibm.ssl.trustStoreCreateCMSStash = false
com.ibm.ssl.trustStoreScope = (cell):ESB_DEV
com.ibm.ssl.trustStore = E:/IBM/content/resources/dev_projectfiles_dir/ISB/isb-truststore.jks
com.ibm.ssl.keyStoreProvider = IBMJCE
com.ibm.ssl.enabledCipherSuites = SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256 SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA256 SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA
com.ibm.ssl.daysBeforeExpireWarning = 60
com.ibm.ssl.keyStoreServerAlias = isbgatewaytst
com.ibm.ssl.clientAuthentication = false
com.ibm.ssl.keyStore = E:/IBM/content/resources/dev_projectfiles_dir/ISB/isb-keystore-tst.jks
com.ibm.ssl.trustStoreUseForAcceleration = false
com.ibm.ssl.trustStoreReadOnly = false
com.ibm.ssl.keyStoreScope = (cell):ESB_DEV
com.ibm.ssl.tokenEnabled = false
com.ibm.ssl.keyStoreName = ISBGatewayPrivatekey
com.ibm.ssl.keyStorePassword = ********
com.ibm.ssl.keyStoreInitializeAtStartup = false
com.ibm.ssl.trustStoreType = JKS

Моя проблема заключается в том, как поместить информацию KEYSTORE и TRUSTSTORE в org.apache.wink.client.ClientConfig или где-либо еще, как это было ранее, при настройке javax.net.ssl.SSLContext? Задал информацию о псевдониме WAS SSL в свойствах ClientConfig, но считаю, что это просто добавление местоположения файла Магазина, которое не используется для клиента REST.

        public static String getPPLUResponseString(String servicePath) {
        String responseAsString = "";
        com.ibm.websphere.ssl.JSSEHelper jsseHelper = com.ibm.websphere.ssl.JSSEHelper.getInstance();
        try {
            Properties sslProps = null;
            String alias = "ISBGatewaySSL";
            sslProps = jsseHelper.getProperties(alias, getConnectionInfo(), null);

            org.apache.wink.client.ClientConfig clientConfig = new org.apache.wink.client.ClientConfig();
            clientConfig.readTimeout(Integer.parseInt(commonProp.getProperty(READ_TIMEOUT)));
            clientConfig.connectTimeout(Integer.parseInt(commonProp.getProperty(CONNECTION_TIMEOUT)));
            clientConfig.setProperties(sslProps);

            Enumeration keys = clientConfig.getProperties().keys();
            while (keys.hasMoreElements()) {
                String key = (String) keys.nextElement();
                String value = (String) clientConfig.getProperties().get(key);
                System.out.println(" clientConfig.getProperties(): " + key + ": " + value);
            }

            org.apache.wink.client.RestClient restClient = new org.apache.wink.client.RestClient(clientConfig);

            String url = commonProp.getProperty(ENDPOINT_URL) + servicePath;
            System.out.println(" url: " + url);

            org.apache.wink.client.Resource restResource = restClient.resource(url);

            System.out.println(" before client response");
            org.apache.wink.client.ClientResponse clientResponse = restResource.accept(MediaType.APPLICATION_JSON_TYPE).get();

            int statusCode = clientResponse.getStatusCode();
            System.out.println(" response statusCode: " + statusCode);

            String responseEntity = clientResponse.getEntity(String.class);
            System.out.println(" responseEntity start: " + responseEntity);
            System.out.println(" responseEntity end: ");
            if (responseEntity != null) {
                responseAsString = responseEntity;
            }
        } catch (com.ibm.websphere.ssl.SSLException e) {
            System.out.println(" com.ibm.websphere.ssl.SSLException");
            e.printStackTrace();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
        return responseAsString;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...