Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Условно, так: Код:
class MyX509ExtendedKeyManager extends X509ExtendedKeyManager {
private final KeyStore keyStore;
// Обычно формируется кэш из пар "алиас=сертификат+ключ", перечисленных и подобранных по паролю
public MyX509ExtendedKeyManager(KeyStore keyStore, char[] password) {
System.out.println("MyX509ExtendedKeyManager()");
this.keyStore = keyStore;
}
// получение списка алиасов для выбора ключа и сертификата
@Override
public String[] getClientAliases(String s, Principal[] principals) {
System.out.println("getClientAliases()");
return new String[] {"clientTLS"};
}
// получение алиаса для выбора ключа и сертификата
@Override
public String chooseClientAlias(String[] strings, Principal[] principals, Socket socket) {
System.out.println("chooseClientAlias()");
return "clientTLS";
}
@Override
public String[] getServerAliases(String s, Principal[] principals) {
System.out.println("getServerAliases()");
return new String[0];
}
@Override
public String chooseServerAlias(String s, Principal[] principals, Socket socket) {
System.out.println("chooseServerAlias()");
return null;
}
// чтение сертификатов, обычно это кэш со списком пар "алиас=сертификат+ключ"
@Override
public X509Certificate[] getCertificateChain(String s) {
System.out.println("getCertificateChain()");
try {
Certificate[] certs1 = keyStore.getCertificateChain(s);
X509Certificate[] certs2 = new X509Certificate[certs1.length];
System.arraycopy(certs1, 0, certs2, 0, certs1.length);
return certs2;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// чтение ключа, обычно это кэш со списком пар "алиас=сертификат+ключ"
@Override
public PrivateKey getPrivateKey(String s) {
System.out.println("getPrivateKey()");
try {
return (PrivateKey) keyStore.getKey(s, "1".toCharArray());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};
class MyX509ExtendedTrustManager extends X509ExtendedTrustManager {
// Загрузка доверенных сертификатов
public MyX509ExtendedTrustManager(KeyStore trustStore, char[] password) {
System.out.println("MyX509ExtendedTrustManager()");
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
System.out.println("checkClientTrusted()");
}
// проверка серверного сертификата
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
System.out.println("checkServerTrusted()");
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
System.out.println("checkClientTrusted()");
}
// проверка серверного сертификата
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
System.out.println("checkServerTrusted()");
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
System.out.println("checkClientTrusted()");
}
// проверка серверного сертификата
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
System.out.println("checkServerTrusted()");
}
@Override
public X509Certificate[] getAcceptedIssuers() {
System.out.println("getAcceptedIssuers()");
return new X509Certificate[0];
}
};
KeyStore keyStore = KeyStore.getInstance("HDImageStore");
keyStore.load(null, null);
KeyStore trustStore = KeyStore.getInstance("CertStore");
trustStore.load(new FileInputStream("truststore.store"), "1".toCharArray());
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
sslCtx.init(new KeyManager[] {
new MyX509ExtendedKeyManager(keyStore, "1".toCharArray())},
new TrustManager[] {new MyX509ExtendedTrustManager(trustStore, null)},
null
);
SSLSocketFactory sslSocketFactory = sslCtx.getSocketFactory();
...
Отредактировано пользователем 3 апреля 2019 г. 12:31:02(UTC)
| Причина: Не указана |