Ответ 1
guido ответ указал мне в правильном направлении. Это просто вопрос:
sudo apt-get install libbcprov-java
Я нахожусь на новой установке Ubuntu, которая только что установила OpenJDK:
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode) on Ubuntu 64 bit 10.10
Не уверен, что это актуально, но я запускаю его из VMWare Fusion.
Следующая строка:
javax.net.SSLContext.getDefault(); // same as getInstance("Default")
throws the following exception:
java.net.SocketException: java.security.NoSuchAlgorithmException: Default SSLContext not available
Мои коллеги и я пробовали это на нескольких машинах, все свежие установки Ubuntu и продолжаем получать это. Мне посоветовали попробовать getInstance ( "TLSv1" ), но это привело к той же ошибке. Кажется, что-то действительно фундаментальное, чтобы не работать, поэтому я полагаю, что мы должны делать что-то неправильно.
guido ответ указал мне в правильном направлении. Это просто вопрос:
sudo apt-get install libbcprov-java
openjdk, поставляемый с ubuntu, может отсутствовать поставщик JCE; загрузите bouncycastle crypto api из http://www.bouncycastle.org/ (его проект с открытым исходным кодом, реализующий JCE) и поместите его в свой путь к проекту.
Затем в вашем классе обратитесь к следующему образцу кода:
static { Security.addProvider( new BouncyCastleProvider() ); } public SSLSocket getSSLSocket() { // Load the Keystore KeyStore ks = KeyStore.getInstance(keystoreType); ks.load(new FileInputStream(this.keyStorePath),this.keyStorePass.toCharArray()); // Get a KeyManager and initialize it KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509"); kmf.init(ks, this.keyStorePass.toCharArray()); // Get a TrustManagerFactory and init with KeyStore TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509"); tmf.init(ks); // Get the SSLContext to help create SSLSocketFactory SSLContext sslc = SSLContext.getInstance("TLS"); sslc.init(kmf.getKeyManagers(), null, null); // Get SSLSocketFactory and get a SSLSocket SSLSocketFactory sslsf = sslc.getSocketFactory(); SSLSocket socket = (SSLSocket) sslsf.createSocket(host, port); return socket; }