Мне нужно работать с машиной F5, которая использует соединение протокола TLS. Для этого я построил класс, который использует объект HTTPsURLConnection.Настройка протокола TLS для HTTPSURLConnection
m_httpsConnection = (HttpsURLConnection) m_url.openConnection();
Затем я скачал файл сертификата F5, использовал Keytool JDK для создания хранилища ключей, и использовать его, чтобы попытаться установить соединение, чтобы использовать протокол TLS:
InputStream in = new FileInputStream(new File("c:/temp/F5keystore"));
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(in, "changeit".toCharArray());
in.close();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new TrustManager[] {defaultTrustManager}, null);
SSLSocketFactory sslSocketFactory = context.getSocketFactory();
((HttpsURLConnection) m_httpsConnection).setSSLSocketFactory(sslSocketFactory);
(я пощадил уловы от вас ...)
код кажется проездом fleuently, но когда я делаю что:
OutputStream os = m_httpsConnection.getOutputStream();
я ...
«javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX путь здание не удалось: sun.security.provider.certpath.SunCertPathBuilderException: не смог найти правильный путь к сертификации просил цель "
Теперь у меня есть файл файл F5keystore под C: \ Temp, так почему он не нашел ..
И это действительно правильный способ установить TLS для подключения? ? Сейчас я делаю это после открытия соединения, хотя я мог подумать, что это должно быть до открытия соединения. Но тогда, соединение все еще пустой ...
Я добавляю здесь больше информации по Вашему желанию:
C:\temp>keytool -v -printcert -file server.crt
Owner: [email protected], CN=localhost.localdomain, OU=MyOrg, O=MyCompany, L=Seattle, ST=WA, C=--
Issuer: [email protected], CN=localhost.localdomain, OU=MyOrg, O=MyCompany, L=Seattle, ST=WA, C=--
Serial number: 90f9d7e288ae6a77
Valid from: Fri Nov 07 08:20:36 IST 2014 until: Mon Nov 04 08:20:36 IST 2024
Certificate fingerprints:
MD5: C1:BE:43:9B:8B:C3:AA:F7:F2:BF:E6:06:08:42:18:17
SHA1: 12:36:01:30:14:68:1C:C9:7D:7B:32:75:C6:08:86:E9:36:AD:CF:AA
Signature algorithm name: SHA1withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: AA B6 71 94 D1 CB ED DF 1B 38 66 12 70 94 AA 76 ..q......8f.p..v
0010: 68 DF 2A 16 h.*.
]
]
#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:true
PathLen:2147483647
]
#3: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: AA B6 71 94 D1 CB ED DF 1B 38 66 12 70 94 AA 76 ..q......8f.p..v
0010: 68 DF 2A 16 h.*.
]
[[email protected], CN=localhost.localdomain, OU=MyOrg, O=MyCompany, L=Seattle, ST=WA, C=--]
SerialNumber: [ 90f9d7e2 88ae6a77]
]
С наилучшими пожеланиями, Tal
Вы можете добавить к сообщению вывод из 'openssl s_client -connect host: port' и' keytool -v -printcert -file path_to_cert_file'? – user1516873
Ничего себе, это слишком долго для добавления его в качестве комментария, и я не вижу другого способа поставить его здесь ... любое предложение? Вы знаете? Я попытаюсь отредактировать исходный вопрос, который я разместил ... – dushkin
Что касается opensl, следует ли его сначала установить? И хост: порт, ссылающийся на F5, не так ли? – dushkin