2015-02-24 2 views
1

Мне нужно работать с машиной 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

+0

Вы можете добавить к сообщению вывод из 'openssl s_client -connect host: port' и' keytool -v -printcert -file path_to_cert_file'? – user1516873

+0

Ничего себе, это слишком долго для добавления его в качестве комментария, и я не вижу другого способа поставить его здесь ... любое предложение? Вы знаете? Я попытаюсь отредактировать исходный вопрос, который я разместил ... – dushkin

+0

Что касается opensl, следует ли его сначала установить? И хост: порт, ссылающийся на F5, не так ли? – dushkin

ответ

0

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

Смежные вопросы