Intereting Posts
Переменная php активируется, когда я вызываю ее из индексного файла, но не из включенного файла? PHP: Получить индекс элемента с именем тега Как отправить несколько значений полей ввода с использованием метода ajax post Как мы можем отправлять сообщения GCM в большом количестве 1000 в базу данных, скажем, из 10 000 зарегистрированных пользователей? Хранить MySQL в массиве PHP для двух запросов Почему $ _SERVER всегда GET? Несоответствие типа данных в выражении критериев с использованием Access через ODBC Лучший способ разработки обновленного веб-сайта в реальном времени Возвращаемая переменная с наибольшим значением? Laravel Назад на страницу со старым вводом для проверки если http: // в строке, то оставьте его, иначе, если не добавить его Создание динамической таблицы с помощью rowspan PHP Модуль PHP GTK в php.ini Проблема базы данных UTF-8 Преобразование float decimal в дроби

SSL-код PHP-кода должен быть преобразован в Java

У меня есть файл Pem, который я использую с этим PHP-кодом для подключения к SSL-серверу c ++, но теперь мне нужен этот PHP-код, написанный на Java

$ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'cert.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $pass); $fp = stream_socket_client('ssl://serverURL', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); if (!$fp) { print "Failed to connect $err $errstr\n"; return; } 

Любые идеи, как читать в файле cert.pem на Java, а затем установить SSL-сокет?

Спасибо!

Вам понадобится Bouncy Castle в вашем классе.

 PEMReader pr = new PEMReader(new FileReader("cert.pem")); X509Certificate cert = (X509Certificate) pr.readObject(); PEMReader kr = new PEMReader(new FileReader("privkey.pem"), new PasswordFinder() { public char[] getPassword() { return "passphase".toCharArray(); } }); KeyPair key = (KeyPair) kr.readObject(); KeyStore ksKeys = KeyStore.getInstance("JKS"); ksKeys.load(null, "passphase".toCharArray()); ksKeys.setCertificateEntry("MyCert", cert); ksKeys.setKeyEntry("Mykey", key.getPrivate(), "passphase".toCharArray(), new Certificate[]{cert}); KeyManagerFactory kmf = KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ksKeys, "passphase".toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ksKeys); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); Socket socket = sslContext.getSocketFactory().createSocket( "localhost", 4433); BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); PrintWriter out = new PrintWriter(new OutputStreamWriter( socket.getOutputStream())); out.println("Hello World"); System.out.println(in.readLine()); out.close(); in.close(); 

Если вы запустите openssl s_server -Verify cert.pem -cert cert.pem -key privkey.pem , он должен показать:

 depth=0 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd verify error:num=18:self signed certificate verify return:1 depth=0 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd verify return:1 Hello World DONE shutting down SSL CONNECTION CLOSED ACCEPT