Tag: ssl

具有自签名证书的Java SSL连接,无需将完整密钥库复制到客户端

我正在设置一个Java许可servlet以及一个客户端应用程序,该应用程序将发布新许可证请求并validation该服务器上的现有许可证。 servlet在Tomcat中运行。 我已经配置了Tomcat,以便它只允许通过https连接到servlet,这样就可以了。 我使用’keytool -genkey -alias www.mysite.com -keyalg RSA -keystore license.store’创建了一个自签名证书,该证书创建了一个文件license.store并将tomcat指向此keystoreFile,密码为asdf1234 。 当我尝试通过Java中的https从客户端连接到servlet时,我收到熟悉的PKIX path building failed因为证书不在信任库中。 我尝试使用此建议修复此问题,从而生成以下代码: private SSLSocketFactory getSSLFactory() throws Exception { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); InputStream is = this.getClass().getResourceAsStream(“license.store”); if(is ==null) { return null; } keyStore.load(is, “asdf1234”.toCharArray()); is.close(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keyStore); SSLContext ctx = SSLContext.getInstance(“TLS”); ctx.init(null, tmf.getTrustManagers(), null); return ctx.getSocketFactory(); } […]

Smack:“找不到认证路径的信任锚”

我正在尝试从Android连接到localhost中的Apache Vysper XMPP服务器。 我正在使用Smack框架来执行XMPP操作: AbstractXMPPConnection connection = new XMPPTCPConnection(“bigdestroyer”, “”, ip); try { connection.setPacketReplyTimeout(10000); connection.connect(); } catch (SmackException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XMPPException e) { e.printStackTrace(); } 但我得到这个错误: javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:未找到证书路径的信任锚。 我想这与SSL证书有关,但我不知道我该做什么。 你能帮助我吗? 我试图在assets文件夹中放置cert文件(与服务器相同)并以这种方式创建连接: XMPPTCPConnectionConfiguration connectionConfiguration = configuration.setConnectTimeout(10000) .setUsernameAndPassword(“admin”, “admin”) .setHost(ip) .setServiceName(ip) .setKeystorePath(“file:///android_asset/bogus_mina_tls.cert”) .build(); XMPPTCPConnection connection = new XMPPTCPConnection(connectionConfiguration); 但它仍然无效。 […]

从文件导入证书时SSL握手失败

我正在创建一个HTTPS服务器并自己validation证书。 我有一个奇怪的错误。 当我生成证书并添加该密钥库时,我能够进行SSL握手。 keytool -genkey -keyalg rsa -alias mycert -keystore lig.keystore -storepass changeit -keypass changeit 当我使用keytool导入证书并将其添加到密钥库时,我收到SSH Handshake Failure错误。 keytool -noprompt -importcert -file certDer -alias mycert -keystore lig.keystore -storepass changeit -keypass changeit 确切地说,第一个是自签名证书。 第二个是第三方证书。 SSLHandshake适用于自签名证书,但不适用于第三方证书。 任何人都可以告诉为什么? HttpsNetServer.java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.Certificate; import […]

SSL握手exception:SSL库中的失败,通常是协议错误

我正在使用带有android v4.4.2(Java)和java_websockets的物理设备,并且在尝试连接到websocket时出现此错误。 javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x7aa38588: Failure in SSL library, usually a protocol error error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO: unknown protocol (external/openssl/ssl/s23_clnt.c:769 0x73a81cfc:0x00000000) 我找到了这个答案 ,我尝试实现它,但没有任何改变。 这是我获得NoSSLv3SocketFactory代码的NoSSLv3SocketFactory 。 它进入try catch直到最后一行mWebSocketClient.connect()但它没有进入catch, onError记录错误。 这是websocket设置代码。 … String complete = wsBase + ep; URI uri = new URI(complete); mWebSocketClient = new WebSocketClient(uri, new Draft_17()) { @Override public void onOpen(ServerHandshake serverHandshake) { […]

Bing Azure搜索API

我正在尝试连接到Bing搜索API并且无法使代码生效。 我搜索了问题,找不到工作代码。 这是我的代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.apache.commons.codec.binary.Base64; public class BSearch{ public static void main(String[] args) { // TODO Auto-generated method stub //————————————–Bing search—————————— String searchText = “barack”; searchText = searchText.replaceAll(” “, “%20″); String accountKey=”MYACCOUNTKEY”; byte[] accountKeyBytes = Base64.encodeBase64((accountKey + “:” + accountKey).getBytes()); String accountKeyEnc = […]

javax.net.ssl.SSLException:读取错误:ssl = 0x56e63588:系统调用期间的I / O错误,同级连接重置

我一直在使用org.apache.http.client.HttpClient从HTTP服务器下载过去2年的一些数据并且工作正常。 最近我们出于某些安全原因切换到HTTPS。这也适用于WiFi和高速移动数据(3G)。但最常见的是数据连接速度慢(2G)我的下载因下面的堆栈跟踪而中断。 javax.net.ssl.SSLException: Read error: ssl=0x56e63588: I/O error during system call, Connection reset by peer at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method) at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:690) at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103) at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:120) at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:131) at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:140) at java.io.FilterInputStream.read(FilterInputStream.java:114) 这就是我的代码的样子: HttpPost httpPost = new HttpPost(url); UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity( params, HTTP.UTF_8); httpPost.setEntity(p_entity); response = httpClient.execute(httpPost); DataInputStream in = new DataInputStream(response.getEntity().getContent()); String st = […]

如何使用自签名证书连接到Android(paho客户端)中的Mqtt服务器?

我在使用自签名证书连接到mqtt服务器时遇到问题。 即时通讯使用Paho客户端,并希望使用TLSv1.2连接到服务器。 实际上,我成功连接Android API 20+,但在此版本以下没有成功。 到目前为止我做了什么: 1-创建了一个PKCS#12密钥库并放入.crt文件并为其提供密码并保存(它将是.pfx文件) 2-将.pfx文件添加到android项目中的原始文件夹中 3-使用下面的代码加载自签名证书: connection = createConnection(mqttCallback); MqttConnectOptions connOpts = optionsFromModel(connectionModel); connOpts.setSocketFactory(getSSLSocketFactory(keyStoreInputStream, keyStorePassword)); connection.addConnectionOptions(connOpts); 而getSSLSocketFactory方法是最重要的部分: public SSLSocketFactory getSSLSocketFactory (InputStream keyStore, String password) throws MqttSecurityException { try{ SSLContext ctx = null; SSLSocketFactory sslSockFactory=null; KeyStore ks; ks = KeyStore.getInstance(“PKCS12”); ks.load(keyStore, password.toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(“X509”); tmf.init(ks); TrustManager[] tm = tmf.getTrustManagers(); ctx = […]

在Spring MVC中无法validation目标证书的exception

我试图使用我的用户名和密码从jira服务器获取问题详细信息,但我收到一个ssl错误,说无法validation证书 所以如何validation证书 url:http:local / 8080 / frr / hello 得到错误: 嵌套exception是org.springframework.web.client.ResourceAccessException:GET请求上的I / O错误 “ https://jira.example.com/rest/api/2/issue/id ”: sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径; 嵌套exception是javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到具有根本原因sun.security的请求目标的有效证书路径.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径 我的Service.class代码 @Controller public class Service{ @RequestMapping(“/hello”) public String Data(ModelMap model){ RestTemplate restTemplate = new RestTemplate(); ResponseEntity result = restTemplate.exchange(“https://jira.example.com/rest/api/2/issue/id”, HttpMethod.GET, new HttpEntity(createHeaders(“username”, “password”)), String.class); model.addAttribute(“message”, result); return “helloworld”; } RestTemplate restTemplate = new RestTemplate(); HttpHeaders createHeaders( String […]

SSLSocket在另一个SSLSocket上

我正在为一个系统编写Android客户端,该系统要求我打开SSLSocket到代理服务器,进行隧道握手,然后在隧道上创建另一个SSLSocket。 这是我创建隧道的代码: SSLSocketFactory sslsocketfactory = securityService.getSslContextNoCerts().getSocketFactory(); SSLSocket sslSocket = (SSLSocket) sslsocketfactory.createSocket(proxyAddress.getAddress(), proxyAddress.getPort()); sslSocket.setEnabledProtocols(new String[] { SecurityService.TLS10 }); sslSocket.setEnabledCipherSuites(SecurityService.CIPHERS); sslSocket.startHandshake(); 然后我做隧道握手然后: SSLSocketFactory sslsocketfactory = securityService.getSslContext().getSocketFactory(); hostSocket = (SSLSocket) sslsocketfactory.createSocket(tunnel, InetAddress.getByAddress(remoteAddress.getIpAddress()).getHostAddress(), remoteAddress.getPort(), false); hostSocket.setUseClientMode(false); hostSocket.setNeedClientAuth(true); securityService.setEnabledProtocols(hostSocket); hostSocket.setEnabledCipherSuites(SecurityService.DATASESSION_CIPHERS); hostSocket.startHandshake(); 此时,我收到一条带有以下消息的SSLProtocolException: 错误:140760FC:SSL例程:SSL23_GET_CLIENT_HELLO:未知协议(external / openssl / ssl / s23_srvr.c:589 0xad12b3f0:0x00000000) 谁知道我怎么能做到这一点? 我知道你的第一个问题是为什么将SSL层叠在SSL上,但我正在为需要它的EXISTING系统编写客户端。 任何帮助将非常感激。 Zhubin

如何在Java LDAP连接上指定SSL / TLS版本?

我正在研究Java LDAP客户端,但我仍然缺少一些有关如何正确执行此操作的信息或知识。 我的代码看起来像这样: LdapContext ctx = null; Hashtable env = new Hashtable (); try{ env.clear(); env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”); env.put(Context.PROVIDER_URL, “url”); env.put(Context.SECURITY_PRINCIPAL, “user”); env.put(Context.SECURITY_CREDENTIALS, “password”); env.put(Context.SECURITY_PROTOCOL, “ssl”); env.put(“java.naming.security.ssl.ciphers”, “SSL_RSA_EXPORT_WITH_RC4_40_MD5”); ctx = new InitialLdapContext(env, null); } catch(NamingException nex) { // error handling } 目前发生以下事情: 在调试ssl连接时,我看到在我的LDAP-Server和我的程序之间建立了TLSv1连接。 我在ssl握手时看到以下内容和服务器: *** ClientHello, TLSv1.2和*** ServerHello, TLSv1 *** ClientHello, TLSv1.2 *** ServerHello, TLSv1 我现在想念的东西: […]