Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu上OpenJDK中的Java SSL被破坏了吗?_Java_Ssl_Ubuntu_Openjdk - Fatal编程技术网

Ubuntu上OpenJDK中的Java SSL被破坏了吗?

Ubuntu上OpenJDK中的Java SSL被破坏了吗?,java,ssl,ubuntu,openjdk,Java,Ssl,Ubuntu,Openjdk,我刚刚安装了OpenJDK,正在重新安装Ubuntu: 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

我刚刚安装了OpenJDK,正在重新安装Ubuntu:

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”),但这会引发相同的错误。看起来有些根本性的东西不工作,所以我想我们一定是做错了什么。

ubuntu附带的openjdk可能缺少JCE提供商;从(一个实现JCE的开源项目)下载bouncycastle crypto api,并将其放入项目类路径中

然后在课堂上参考以下示例代码:

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; } 静止的{ addProvider(新的BouncyCastleProvider()); } 公共SSLSocket getSSLSocket(){ //加载密钥库 KeyStore ks=KeyStore.getInstance(keystoreType); load(新文件输入流(this.keystrepath)、this.keystrepass.toCharArray()); //获取一个KeyManager并初始化它 KeyManagerFactory kmf=KeyManagerFactory.getInstance(“sunx509”); init(ks,this.keystrepass.toCharArray()); //获取TrustManagerFactory和具有密钥库的init TrustManagerFactory tmf=TrustManagerFactory.getInstance(“sunx509”); tmf.init(ks); //获取SSLContext以帮助创建SSLSocketFactory SSLContext sslc=SSLContext.getInstance(“TLS”); init(kmf.getKeyManager(),null,null); //获取SSLSocketFactory并获取SSLSocket SSLSocketFactory sslsf=sslc.getSocketFactory(); sslsocketsocket=(SSLSocket)sslsf.createSocket(主机,端口); 返回插座; }
圭多的回答为我指明了正确的方向。这只是做以下事情的问题:

sudo apt-get install libbcprov-java