1.7 код работает нормально, но в 1.6 он ломается с ошибкой рукопожатия - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь вызвать API мыла в JAVA с помощью SSL, Java 1.7 работает, но 1.6 не работает.

Я получаю: javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure

почему с java 1.7 работает, а с 1.6 не работает?

System.setProperty("javax.net.ssl.keyStore", "C:\\Users\\user\\Desktop\\SoapUI (1)\\SoapUI\\x.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "passX!");
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("https.protocols", "TLSv1");



URL u = null;
try {
    u = new URL("https://x1/x2WS/x3?wsdl");
} catch(Exception ex) {
    ex.printStackTrace();
}
JobInput2Service service = new JobInput2Service(u);
JobInput2 job = service.getJobInput2Port();
try {
    HelloRequestParm parm = new HelloRequestParm();
    parm.setMessage("value");
    HelloResponseData res = job.sayHello(parm);
    System.out.print("\n res: "+res.getMessage());
} catch (Exception ex) {
    ex.printStackTrace();
}

1 Ответ

0 голосов
/ 05 марта 2019

Согласно ссылкам ниже, Java 6.0 (все версии) поддерживает TLS 1.0.

Теперь он, очевидно, не работает для вас, и похоже, что вы используете правильное значение свойства.Я подозреваю, что проблема в том, что вы устанавливаете сетевые свойства в объекте системных свойств слишком поздно , чтобы они имели какой-либо эффект.Попробуйте установить их, используя -Dname=value свойства командной строки.

Если вы устанавливаете системные свойства программно, вам нужно сделать это, прежде чем они будут использованы.Свойства сети обычно используются, когда запускается статическая инициализация, и это часто раньше, чем вы думаете в жизненном цикле приложения.

Однако есть одна вещь, которая беспокоит меня.Согласно одной из этих ссылок, TLS 1.0 является значением по умолчанию для Java 6.0.Если это правильно, нет необходимости устанавливать «https.protocols» для получения TLS 1.0.Итак, если мое предложение выше не работает, следующим шагом должно быть добавление -Djavax.net.debug=all и просмотр сообщений журнала, создаваемых при попытке установить соединение HTTPS.

Ссылки:


Вы должны сообщить следующее своему руководству и клиентам:

  • Вам / им не следует использовать Java 6 или Java 7 ... если у вас / у них нет поддержки Oracle Javaконтракт и используют недавний непубличный выпуск.Открытые выпуски Java 6 или Java 7 являются EOL.Java 6 была EOL с апреля 2013 года. Это много исправлений безопасности, которые вам не хватает!

  • Вы / они не должны использовать TLS 1.0.Это больше не считается безопасным.Один источник говорит следующее:

    "TLS 1.0 - это первая версия TLS, довольно распространенная в мире и требующая обходных путей как на клиенте, так и на сервере.работать безопасно для всех комплектов шифров. TLS 1.0 также не может использовать современные комплекты шифров, которые обеспечивают большую безопасность и эффективность. "

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