Tag: ssl

如何从pem文件加载公共证书?

我试图从下面的文件中提取RES公钥 —–BEGIN CERTIFICATE—– MIIGwTCCBamgAwIBAgIQDlV4zznmQiVeF45Ipc0k7DANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSUwIwYDVQQDExxEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBDQS0zMB4XDTEyMTAzMDAwMDAwMFoXDTE1MTEwNDEyMDAwMFowgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIEwVUZXhhczEQMA4GA1UEBxMHSG91c3RvbjEpMCcGA1UEChMgVmFsZXJ1cyBDb21wcmVzc2lvbiBTZXJ2aWNlcywgTFAxCzAJBgNVBAsTAklUMRkwFwYDVQQDDBAqLnZhbGVydXMtY28uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1GR2NKV9GwVHBtpvgBUdVVbd6qeh6aKOS/r5TIKFd3vFBGjC7cWYwF26F0YFvrAP262Yu+oDRTeuSKwyHmegD7aTSOyCTOva69WcnKYRmNfHsnnGRa5z4v9EKc1RbNcwIrDUz8zcdHdP6AO8JJgLreWyBl15WXdxAr3yNbwoyJTbWk2ToC64LASP+8SQQTRszg762FIbhZ8xda8KKGAyC29/FOcLIttoBANT4hEwvcRLKOxAA8tg322Dla1XU2gnxWP2dSuLEflGRcEovPjGqxCzuGe0aN8Lg7aKwgCR1OYXmGiKCNHupHkN7A+QrD8zrxKUFd1UiyLcIovYhadcdQIDAQABo4IDTDCCA0gwHwYDVR0jBBgwFoAUUOpzidsp+xCPnuUBINTeeZlIg/cwHQYDVR0OBBYEFKKX1d9m6kHUjxQ1OpzXgNRbNGR4MCsGA1UdEQQkMCKCECoudmFsZXJ1cy1jby5jb22CDnZhbGVydXMtY28uY29tMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATBhBgNVHR/wQCMAAwDQYJKoZIhvcNAQEFBQADggEBALdCoLlXX4Sg8pKcqlT8l1MHbS2rsnw03R8lVQBQqcJimE9VZqDdoLfEPASIEMQbl40T6RHb4tFuZNjP2y4Fy3jMAYf1yajZAtAd5OLOMU39cgZQY2J8QCeEVKt8qbH6P32/2yyuh4hcNL4Vz8G0MTzwVUjz8WVmUBHAQSpS0T9oDKkwvmrkPGJFVuBxCRDKYb/23O8EKKzSTiO37VbCaeFUrTuWc8tGP8XDqRdj2yefiVqcNp4xr2tq9ZhJcISWODqO4fzt6vPOwgdnY3fbPLeH2tZoZTSCPURAadoNOAIC6fCLFlHjLuRGkxWIHMX3QnrrVD8pC7FnDO09q/aADew= —–END CERTIFICATE—– 这是我做的代码.. public static PublicKey loadPublicKeyFromFile(File publicKeyFile) throws Exception { FileReader file = new FileReader(publicKeyFile); PemReader reader = new PemReader(file); X509EncodedKeySpec caKeySpec = new X509EncodedKeySpec(reader.readPemObject().getContent()); KeyFactory kf = KeyFactory.getInstance(“RSA”); PublicKey caKey = kf.generatePublic(caKeySpec); return caKey; } 但它抛弃了 java.security.InvalidKeyException: IOException: ObjectIdentifier() — data isn’t an object ID 从文件中提取RES公钥的适当方法是什么?

如何在java中设置SSL协议版本? 我怎么知道哪一个? javax.net.ssl.SSLException:收到致命警报:protocol_version

我正在使用Apache HttpClient 4.3与hubic.com的API进行交互。 我的最小可重复示例只是一个内衬: HttpClientBuilder.create().build().execute(new HttpGet(“https://hubic.com”)); 然而,抛出: Exception in thread “main” javax.net.ssl.SSLException: Received fatal alert: protocol_version at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1991) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1104) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:275) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:254) at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:117) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) 如果我使用System.setProperty(“javax.net.debug”, […]

在Jetty服务器中,如何获取需要客户端身份validation时使用的客户端证书?

设置一个请求客户端身份validation的嵌入式Jetty服务器非常容易:只需要添加语句SslContextFactory.setNeedClientAuth(true); 配置服务器时的ssl上下文。 在服务器的信任库中拥有其证书的任何客户端都将能够与服务器建立TLS连接。 但是,我需要知道所有可能的可信客户端的哪个客户端正在发出请求; 换句话说,我需要知道此连接中使用的客户端证书,特别是在处理程序中。 有谁知道如何访问此证书或甚至可能?

如何更新Android应用程序中的SSL证书?

最近我在实施SSL的项目上工作。 SSL证书每年到期一次。 在我更新服务器上的证书后,它在android中抛出exception。 06-13 11:20:27.709:D / allenj(30076):javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:未找到证书路径的信任锚。 在查看项目代码后,我看到有一个bks文件,所以,这是否意味着每年必须更新一次bks文件,我还必须将应用程序重新上传到谷歌播放。 问题是应对SSL证书续订的标准方法是什么? 谢谢你的帮助。 代码提取 nnable Register_runnable = new Runnable(){ @Override public void run() { EditText emailText = (EditText) findViewById(R.id.editText1regist); EditText pwText = (EditText) findViewById(R.id.editText2registpw); String end = “\r\n”; String twoHyphens = “–“; String boundary = “*****”; try { KeyStore keyStore = KeyStore.getInstance(“BKS”); InputStream in = getResources().openRawResource(R.raw.ballooncardbks); keyStore.load(in, “”.toCharArray()); […]

Chrome与Java SSL Server握手时关闭连接

有几个问题与此类似,但没有一个解决这个具体问题。 如果有,我错过了,请指导相关解决方案。 现在我的问题。 我用Java编写了一个测试SSL服务器: import java.io.FileInputStream; import java.io.OutputStream; import java.security.KeyStore; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLSocket; public class Server { public static void main(String[] args) throws Exception { KeyStore ks = KeyStore.getInstance(“JKS”); ks.load(new FileInputStream(“server.jks”), “123456”.toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(“SunX509”); kmf.init(ks, “123456”.toCharArray()); SSLContext context = SSLContext.getInstance(“TLS”); context.init(kmf.getKeyManagers(), null, null); SSLServerSocketFactory […]

如何在Android中使用自签名SSL证书

这件事现在已经困扰了我好几天了。 我已经阅读了很多关于这整个问题的其他问题,但仍然无法继续。 我创建了一个简单的测试应用程序,只是为了在Android上测试SSL。 应用程序只有一个按钮,当单击时,应用程序尝试通过SSL加密连接将“Hello World”发送到我的测试服务器,然后测试服务器以完全相同的短语进行响应。 首先,我使用openssl为我的服务器创建了测试密钥和测试证书。 然后我一直在按照Crazy Bob博客中的说明进行操作。 我直接从Bouncy Castle的网站获得了Bouncy Castle提供商,创建了一个可信赖的密钥库,如Crazy Bob的博客所示,并且我相信这一切都是正确的。 当我尝试运行我的代码时,我得到了exception“IOException:密钥库的错误版本。” 然后我在StackOverflow上发现了这个问题 。 有人建议我应该尝试使用较旧的Bouncy Castle Providers而不是最新的bcprov-jdk15on-147.jar 。 我继续考虑到这一点,实际上最终尝试了从jdk13-146到jdk16-146的每个bcprovider。 仍然每次我都得到相同的“IOExcpetion:错误版本的密钥库”。 例外。 然后我发现了另一个关于StackOverflow上类似问题的问题。 有人设法通过使用512位大小的密钥而不是1024大小的密钥来摆脱该exception。 好吧,我试了一下,什么也没做,但同样的例外。 我现在在这里,想知道接下来该做什么。 我几乎没有想法和谷歌搜索结果。 我的网络代码是疯狂的bob代码的1对1副本,此外应用程序只有处理按钮的活动类。 我正在尝试在API级别7上实现此function。 任何帮助将不胜感激。 谢谢。

Restlet javax.net.ssl.SSLHandshakeException:null cert chain

我正在本地测试客户端和服务器之间的SSL通信。 所以我使用OpenSSL命令生成证书。 在cacert文件中添加了此证书。 还生成.p12文件。 我在服务器和客户端使用相同的.p12文件。 这是服务器代码 Server server = component.getServers().add(Protocol.HTTPS, port); Series params = server.getContext().getParameters(); params.add(“keystorePath”, “.p12 file path”); params.add(“keystoreType”, “PKCS12”); params.add(“needClientAuthentication”,”true”); component.getDefaultHost().attach(“”, “/AA”), new AAClass()); component.start(); 这是客户端代码: Client client = trustAllCerts(); clientResource = new ClientResource(url); clientResource.setNext(client); try{ clientText = clientResource.post””); } catch(ResourceException e){ e.printStackTrace(); } public Client trustAllCerts() { Client client = null; try […]

使用Java通过https和REST使用RESTful服务

我是REST服务的新用户。 我需要使用Jersey生成的RESTful API服务。 问题出现是因为该服务托管在远程主机上,并且需要https访问证书。 我从组织获得了我的证书,并且我能够使用我的任何浏览器访问该REST API服务(其上设置了证书)。 我在这里阅读了很多post,我已经按照这个主题的答案: 在Java中使用HTTPS和REST 现在我在我的Java Keystore上设置了证书。 但我不知道如何在我的Java程序中使用它,所以它使用我需要的证书来进行https连接。 这是我用于本地测试的简单连接代码。 package rest.test.first; import java.net.URI; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriBuilder; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; public class TestClient{ public static void main(String[]args){ ClientConfig config= new DefaultClientConfig(); Client client=Client.create(config); WebResource service=client.resource(getBaseURI()); //Fluentinterfaces System.out.println(service.path(“rest”).path(“hello”).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class).toString()); //Getplaintext System.out.println(service.path(“rest”).path(“hello”).accept(MediaType.TEXT_PLAIN).get(String.class)); //GetXML System.out.println(service.path(“rest”).path(“hello”).accept(MediaType.TEXT_XML).get(String.class)); //TheHTML System.out.println(service.path(“rest”).path(“hello”).accept(MediaType.TEXT_HTML).get(String.class)); } private […]

具有Java应用程序和SSL的Web服务客户端

我正在开发一个Java桌面应用程序,我想在其中使用Web服务。 Web服务需要使用binarysecuritytoken进行双向SSL连接和消息级安全性。 我使用NetBeans IDE 6.9.1和JDK 1.6.0.23以及JAX-WS作为ws包装器。 如何在不使用客户端计算机上的任何Web服务器的情况下与ws进行通信。 我读过的大多数东西需要在客户机上有tomcat或其他一些web服务器(在tomcat中配置密钥库等等)。 有可能吗? 请为基于SSL的ws客户端推荐一些Java桌面应用程序的文章。

TLS v1.2上的Android客户端/服务器

我正在尝试在服务器和Android客户端之间创建TLS v1.2通信。 我建立了一个TLS v1.0连接有任何问题,但我不能得到v1.2。 这是服务器代码: char[] passphrase = “myComplexPass1”.toCharArray(); KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); keystore.load(new FileInputStream(“cacerts”), passphrase); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(“SunX509”); keyManagerFactory.init(keystore, passphrase); SSLContext sslContext = SSLContext.getInstance(“TLSv1.2”); KeyManager[] keyManagers = keyManagerFactory.getKeyManagers(); SSLContext sslContext.init(keyManagers, null, null); SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory(); SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port); sslServerSocket.setEnabledProtocols(new String [] { “TLSv1”, “TLSv1.1”, “TLSv1.2” }); sslServerSocket.setUseClientMode(false); sslServerSocket.setWantClientAuth(false); sslServerSocket.setNeedClientAuth(false); sslSocket […]