Tag: ssl

Java和C#应用程序之间的SSL通信

我的目标是在Java服务器和用C#编写的客户端之间建立安全通信。 java服务器代码: System.setProperty(“javax.net.ssl.keyStore”,”cert/mySrvKeystore”); System.setProperty(“javax.net.ssl.keyStorePassword”,”myPassword”); SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); SSLServerSocket sslserversocket = = (SSLServerSocket) sslserversocketfactory.createServerSocket(2389); while(true) { System.err.println(“server w8 new connection”); try { SSLSocket sslsocket = (SSLSocket) sslserversocket.accept(); //sslsocket.startHandshake(); in = sslsocket.getInputStream(); out = sslsocket.getOutputStream(); out.flush(); String response = new String(receiveMessage()); while (response != “end”) { System.out.println(“Server recv=”+response); response = new String(receiveMessage()); sendMessage((“echo=”+response).getBytes()); } } […]

Android – 如何以编程方式在密钥库中存储证书?

我正在制作一个金融交易Android应用程序。 它需要SSL身份validation,我成功完成了它(Android和Tomcat之间的握手)。 我使用keytool和openSSL生成服务器和客户端证书。 Tomcat certifcate格式是JKS,而android formate是BKS。 我将此BKS文件存储在Raw文件夹中,并按如下方式使用: public class NetworkCallSecure extends AsyncTask { ResponseListener responseListener; Activity activity; ResultCodes code; public NetworkCallSecure(Activity activity, ResponseListener responseListener, ResultCodes code) { this.responseListener = responseListener; this.activity = activity; this.code = code; } @Override protected String doInBackground(String… params) { try{ System.setProperty(“http.keepAlive”, “false”); HttpsURLConnection .setDefaultHostnameVerifier(new HostnameVerifier() { public boolean verify(String hostname, SSLSession […]

SSLHandShakeException没有适当的协议

我最近在我的网站上添加了SSL,可以通过https访问。 现在,当我的java应用程序尝试向我的网站发出请求并使用缓冲读取器从中读取它时,它会生成此堆栈跟踪 我没有使用自签名证书,证书来自Namecheap,他使用COMODO SSL作为CA来签署我的证书。 即时通讯使用java 8 javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) at sun.security.ssl.Handshaker.activate(Handshaker.java:503) at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1482) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1351) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) 我的代码非常基本,只是尝试使用缓冲读取器读取我网站上的页面 private void populateDataList() { try { URL url = new URL(“https://myURL.com/Data/Data.txt”); URLConnection con = url.openConnection(); con.setRequestProperty(“Connection”, “close”); con.setDoInput(true); con.setUseCaches(false); BufferedReader in = new BufferedReader(new […]

java密钥库和密码设置

我在java keystores和keytool上有以下问题。 我假设密钥库可能有多个证书。 正如我所尝试的那样,通过keytool,我可以创建一个密钥库,并且要访问这个密钥库,我必须设置密码。 另外,要访问每个证书条目,我必须设置密码。 是否必须为密钥库和条目使用相同的密码? 如果不是(我认为这是合理的假设)为什么以下代码: char[] pwd = new char[]{‘s’,’e’,’c’,’r’,’e’,’t’}; KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); ks.load(new FileInputStream(“myPersonal.keystore”), pwd); kmf.init(ks, pwd);//fails here with exception 给我以下例外? Exception in thread “main” java.security.UnrecoverableKeyException: Cannot recover key at sun.security.provider.KeyProtector.recover(Unknown Source) at sun.security.provider.JavaKeyStore.engineGetKey(Unknown Source) at sun.security.provider.JavaKeyStore$JKS.engineGetKey(Unknown Source) at java.security.KeyStore.getKey(Unknown Source) secret是访问我通过keytool创建的密钥库myPersonal.keystore的密码。 其中有2个条目,用于证书,1个DSA和1个RSA。 每个密码库都有不同的密码(和彼此)。 现在代码是正确的,因为如果我使用一个密钥库,其中一个证书条目具有与密钥库相同的密码,则没有exception,程序运行正常。 那么这里的问题是什么? 我不应该有不同的密码? 我不应该有很多证书? 或者是什么?

打开https URL时出错:未设置keyCertSign位

我使用以下代码调用远程https URL: def inputStream = new URL(“https://somewebsite.com”).openStream() 这在我的本地计算机上运行良好,但是当我部署到服务器时,我得到以下exception: java.security.cert.CertPathValidatorException: CA key usage check failed: keyCertSign bit is not set 这个错误的原因是什么,以及它可以解释它在一台机器而不是另一台机器上工作的原因是什么? UPDATE 我正在生产中运行Ubuntu服务器并在本地Mac上进行开发。 我正在尝试访问的网站(我们称之为peopleware.com)具有以下证书信息: AddTrust外部CA根 UTN-USERFirst五金 peopleware.com 我尝试从浏览器保存.cer文件并将它们安装到/ etc / ssl / certs / java / castore的密钥库中

java.lang.Exception:回复和密钥库中的公钥不匹配

我必须访问在443端口托管的Web服务。服务提供商与我们共享了三个证书。 ABCD.cer CA_Certificate.cer CCA_Certificate.cer 我必须通过为SSL通信创建表单链将它们添加到密钥库。我已按照以下步骤操作。 keytool -keystore npci_keystore_test.jks -genkey -alias npci_client_testore Result :- keystore npci_keystore_test.jks created. keytool -import -keystore npci_keystore_test.jks -file CA_Certificate.cer -alias theCARoot Result :- certificate CA_Certificate.cer is added to keystore. keytool -import -keystore npci_keystore_test.jks -file CCA_Certificate.cer -alias theCCARoot Result :- certificate CCA_Certificate.cer is added to keystore. keytool -import -keystore npci_keystore_test.jks -file ABCD.cer -alias […]

以编程方式在Java中添加受信任的证书

我使用SSL在用Java编写的两个组件之间进行通信。 我不能使用CA,所以我必须自我签名。 不幸的是,这意味着当我尝试握手时,我得到一个SunCertPathBuilderException。 我可以创建我自己的X509TrustManager,它只信任所有东西,但这种方式违背了签署证书的目的。 我想,在第一次建立连接时,提示用户“使用无效证书进行SSL握手。将证书添加到商店?” 或者某些东西,所以他们可以将它们添加到他们的证书商店,就像Web浏览器在具有无效证书的站点那样。 我可以在网上找到很多通过命令行向商店添加证书的例子,但我无法弄清楚如何以编程方式进行。 有没有办法做到这一点?

在JCA中为TLS定义密码套件

我希望使用JCA在TLS中支持以下密码套件: TLS_PSK_WITH_3DES_EDE_CBC_SHA TLS_PSK_WITH_AES_128_CBC_SHA TLS_PSK_WITH_NULL_SHA TLS_PSK_WITH_AES_128_CBC_SHA256 TLS_PSK_WITH_NULL_SHA256 它们在JDK7中可用,但不在JDK6中 ,而不是BouncyCastle。 如果我想在JDK6中获得支持,我是否可以使用SPI,JSSE的提供程序和回调方法扩展JCA以实现对这些PSK扩展的支持。 我已经可以在运行时重新定义或添加新的密码实现,但我不确定JCA是否提供足够的粒度来在TLS中添加新的密码套件。

SSLContext.getInstance(“TLS”)是否也支持TLS v1.1和TLS v1.2?

在我的java代码中,我正在使用命令创建一个SSL Context实例 SSLContext ctx = SSLContext.getInstance(“TLS”); 但在我的tomcat服务器中,我正在设置TLSv1.2并且我收到握手错误。 我们如何使用这种方法支持所有TLS协议,就像在cpp中一样,我们有SSLV23客户端方法,它将支持所有协议。

Java客户端中具有SNI的TLS

关于使用传统SSL创建的IP到域映射问题, NHIN Direct的安全和信任工作组正在进行讨论。 如果HISP(由NHIN Direct定义)想要为提供商托管数千个NHIN Direct“健康域名”,那么必须为这些域中的每个域购买IP将是“人为膨胀的成本”。 由于Apache和OpenSSL最近发布了支持SNI扩展的TLS,因此可以使用SNI作为服务器端此问题的解决方案。 但是,如果我们决定允许 NHINDirect传输层的服务器实现支持TLS + SNI,那么我们必须要求所有客户端也支持SNI。 默认情况下,基于OpenSSL的客户端应该这样做,如果您的给定编程语言SSL实现不支持SNI,我们总是可以实现TLS + SNI感知客户端代理。 看来使用OpenJDK的本地Java应用程序还不支持SNI,但我无法从该项目中得到直接的答案。 我知道有OpenSSL Java库可用,但我不知道这是否可行。 你能否给我一个关于TLS + SNI支持Java客户端的“最新技术”总结? 我需要一个Java实现者的观点。