У меня возникли проблемы с установкой соединения SSL/TLS с устройством Ingenico iPP320. Я попробовал решение, предложенное here, но я получаю эту ошибкуПодключение TLS по быстрому рукопожатию iOS вопрос
CFNetwork SSLHandshake failed (-9824 -> -9829)
Я новичок, используя SSL/TLS соединений и не знаю, как я должен идти о том, чтобы установить соединение. То, что я использую, - это файл p12, защищенный паролем, и сертификат не является самоподписанным. Мне сказали, что сервер должен будет также аутентифицировать клиента, поэтому промежуточный и корневой ЦС, возможно, придется отправить на сервер. Я смог получить аутентификацию, работающую на Android, но я не уверен, как это сделать в iOS.
Ниже приведен код Android, который работает.
public SSLSocket createSSLSocket(String ipAddress, int port)
{
try
{
SSLSocket socket = null;
String certStorePassword = "password";
String certStoreType = "pkcs12";
InputStream iStream = getResources().openRawResource(R.raw.clientP12File);
KeyStore keyStore = KeyStore.getInstance(certStoreType);
keyStore.load(iStream, certStorePassword.toCharArray());
// KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, certStorePassword.toCharArray());
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(keyManagerFactory.getKeyManagers(), trustAllCerts, new SecureRandom());
SSLContext.setDefault(sc);
SSLSocketFactory factory = sc.getSocketFactory();
socket = (SSLSocket) factory.createSocket(ipAddress, port);
socket.setEnabledProtocols(new String[] { "TLSv1.2" });
socket.setUseClientMode(true);
socket.startHandshake();
return socket;
}
catch (Exception ex) {
Log.e(TAG, "createSSLSocket: ", ex);
}
return null;
}