Статус: Новичок
Группы: Участники
Зарегистрирован: 20.02.2020(UTC) Сообщений: 1 Откуда: Москва
|
Подскажите пожалуйста куда копать. Мне необходима одностороння аутентификация на сервере по алгоритму GOST.
Пишу клиента. На клиент(где коннектюсь к серверу) должна стоять только JCP ведь?
Что сделано. Поставил JCP. Добавл в него сертификаты. Корневой и промежуточные. Добавил в explorer сертификаты. Мой код. package com.company;
public class Main {
public static void main(String[] args) { String trustStorePath = "c:\\cert\\cert"; //тут лежаь сертфикаты (regservice.cer, root.cer,regservice.pfx)
String trustStorePassword = "12345678"; пароль от хранилища в JCP String urlPath = "https://IPсервере:порт сервера";
ConnectionGOST connectionGOST = new ConnectionGOST(trustStorePath,trustStorePassword,urlPath); boolean checkConnected = connectionGOST.getCheckConnection();
if(checkConnected) { System.out.println("Connected GOST true..."); } if(!checkConnected) { System.out.println("Connected GOST false..."); }
// write your code here }
}
класс package com.company;
import ru.CryptoPro.JCP.JCP; import ru.CryptoPro.ssl.util.TLSContext;
import javax.net.ssl.*; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.Security; import java.security.cert.X509Certificate;
public class ConnectionGOST { static boolean checkConnection = false;//проверка подключения к системе
public boolean getCheckConnection() { return checkConnection; }
static { disableSslVerification(); } private static void disableSslVerification() { try { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } };
// Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } };
// Install the all-trusting host verifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } }
public static void setCheckConnection(HttpsURLConnection connection) throws Exception {
if (connection != null) { checkConnection = true;
} else { checkConnection = false; } }
public ConnectionGOST(String URLPathTrust,String passwordTrust, String URLConnect) { //http://www.cryptopro.ru/forum2/default.aspx?g=posts&t=18270 ////если не добавить принудительно не видит контейнер c сертификатами
Security.addProvider(new ru.CryptoPro.JCP.JCP()); Security.addProvider(new ru.CryptoPro.reprov.RevCheck()); Security.addProvider(new ru.CryptoPro.ssl.Provider()); Security.addProvider(new ru.CryptoPro.Crypto.CryptoProvider()); System.setProperty("com.sun.security.enableCRLDP", "true"); System.setProperty("com.ibm.security.enableCRLDP", "true");
try { SSLContext ctx = TLSContext.initClientSSL( null, URLPathTrust, passwordTrust, null );
SSLSocketFactory factory = ctx.getSocketFactory(); connect(factory, URLConnect);
} catch (Exception e) { System.out.println(e.getMessage()); } }
/** * Функция устанавливает подключение по заданному адресу * на основе переданного SSLSocketFactory. */ public static void connect (SSLSocketFactory factory, String urlPath) throws Exception {
URL url = new URL(urlPath);
// Установка нового соединения с заданным адресом. System.setProperty("javax.net.ssl.trustStoreType", JCP.CERT_STORE_NAME); System.setProperty("javax.net.ssl.trustStore", "c:\\cert\\cert"); System.setProperty("javax.net.ssl.trustStorePassword", "12345678"); System.setProperty("javax.net.ssl.keyStoreType", JCP.HD_STORE_NAME); System.setProperty("javax.net.ssl.keyStorePassword", "12345678");
SSLContext sc = SSLContext.getInstance("TLSv1.2"); //$NON-NLS-1$ sc.init(null, null, new java.security.SecureRandom()); HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); con.setSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setRequestMethod("GET"); // Задание для него требуемого SSLSocketFactory. //factory connection.setSSLSocketFactory(factory); setCheckConnection(connection);
if (checkConnection){ /* BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close();
System.out.println(response.toString());*/ } // Вывод на экран содержимого запрошенной страницы. printContent(connection);
// Разрыв соединения. connection.disconnect();
}
/** * Функция выводит на экран содержимое запрошенной страницы. * * @param connection Соединение. * @throws Exception */ private static void printContent (HttpsURLConnection connection) throws Exception {
if (connection != null) {
printStream(connection.getInputStream()); }
}
/** * Функция выводит на экран содержимое потока. * * @param inputStream Поток. * @throws Exception */ public static void printStream (InputStream inputStream) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader( inputStream, "utf-8"));
String input; while ((input = br.readLine()) != null) { System.out.println(input); }
br.close();
}
}
Ошибка java.security.cert.CertificateException: No subject alternative names presentWARNING: main, handling exception: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present Process finished with exit code 0
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. "На клиент(где коннектюсь к серверу) должна стоять только JCP ведь?" - да, JCP и cpSSL.jar из его состава. "No subject alternative names present" - ошибка сообщает, что в серверном сертификате отсутствует расширение alternative names, которое должно содержать ip/dns сервера. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close