谁能告诉我为什么我在Java中得到一个错误,而使用SSL? [英] Can anyone tell me why I get an error in Java while using SSL?
问题描述
我一直在试图让一个.cpp的服务器和Java小程序客户端,但之间的连接,当我运行小程序我在浏览器中出现此错误。我在信任存储文件中的证书(让我知道如果我不需要它)。任何帮助将是AP preciated。
访问被拒绝(java.util.propertypermission
javax.net.ssl.trustStore中,写)
块引用>进口java.awt中的*。
导入的java.applet。*;
进口javax.net.ssl.SSLSocket中;
进口javax.net.ssl.SSLSocketFactory;
进口java.io. *;
进口的javax.swing *。公共类NO2扩展的Applet { INT宽度,高度; 公共无效的init(){ System.setProperty(javax.net.ssl.trustStore中,keystore.jks);
System.setProperty(javax.net.ssl.trustStorePassword中,的changeit); 串的trustStore = System.getProperty(javax.net.ssl.trustStore中);
如果(的trustStore == NULL){
的System.out.println(javax.net.ssl.trustStore中没有定义);
}其他{
的System.out.println(javax.net.ssl.trustStore中=+的trustStore);
} 尝试{ PrintWriter的toServer = NULL;
BufferedReader中fromServer = NULL; SSLSocketFactory的SSLSocketFactory的=(的SSLSocketFactory)SSLSocketFactory.getDefault();
的SSLSocket的SSLSocket =(SSLSocket的)sslsocketfactory.createSocket(192.168.0.10,12120); 的String [] = newProtocols {的TLSv1};
sslsocket.setEnabledProtocols(newProtocols); toServer =的新PrintWriter(sslsocket.getOutputStream(),TRUE); toServer.println(数据1 \\ n);
toServer.println(数据2 \\ n); InputStreamReader的ISR =新的InputStreamReader(sslsocket.getInputStream());
fromServer =新的BufferedReader(ISR,1); }赶上(例外的例外){ exception.printStackTrace();
}
}
}
解决方案您不能applet中设置系统属性。您不能访问本地文件(keystore.jks)中,系统或者(除非你请求这样做特定的权限)。
您可以通过特殊参数JVM的像的文档是这样的:
< APPLET归档=my_applet.jarcode =MyAppletWIDTH =300HEIGHT =300>
< PARAM NAME =java_argumentsVALUE = - Djavax.net.ssl.trustStore = keystore.jks>
< / APPLET>但同样,带你需要访问本地文件的特殊权限的照顾。
I have been trying to get a connection between a Cpp server and a Java applet client but when I run the applet I get this error in the browser. I have the certificate in the trust store file (let me know if I don't need it). Any help would be appreciated.
access denied ("java.util.propertypermission" "javax.net.ssl.truststore" "write")
import java.awt.*; import java.applet.*; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; import java.io.*; import javax.swing.*; public class no2 extends Applet { int width, height; public void init() { System.setProperty("javax.net.ssl.trustStore", "keystore.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); String trustStore = System.getProperty("javax.net.ssl.trustStore"); if (trustStore == null) { System.out.println("javax.net.ssl.trustStore is not defined"); } else { System.out.println("javax.net.ssl.trustStore = " + trustStore); } try { PrintWriter toServer = null; BufferedReader fromServer = null; SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("192.168.0.10", 12120); String[] newProtocols = {"TLSv1"}; sslsocket.setEnabledProtocols(newProtocols); toServer = new PrintWriter(sslsocket.getOutputStream(), true); toServer.println("Data1\n"); toServer.println("Data2\n"); InputStreamReader isr = new InputStreamReader(sslsocket.getInputStream()); fromServer = new BufferedReader(isr, 1); } catch (Exception exception) { exception.printStackTrace(); } } }
解决方案You can't set system properties within an Applet. You can't access local file (keystore.jks) systems either (unless you request for a specific permission to do so).
You can pass special parameters to JVM like stated in documentation like this:
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_arguments" value="-Djavax.net.ssl.trustStore=keystore.jks"> </APPLET>
But again, take care of the special permissions you'd need to access local files.
这篇关于谁能告诉我为什么我在Java中得到一个错误,而使用SSL?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!