Tag: ssl

如果Jetty的密钥库中有多个证书,它如何选择?

我们的系统中有一些代码用于自动生成自签名证书到密钥存储区,然后由Jetty使用。 如果给定主机的密钥已经存在,则没有任何反应,但如果它不存在,我们会生成一个新密钥,如下所示: public void generateKey(String commonName) { X500Name x500Name = new X500Name(“CN=” + commonName); CertAndKeyGen keyPair = new CertAndKeyGen(“DSA”, “SHA1withDSA”); keyPair.generate(1024); PrivateKey privateKey = keyPair.getPrivateKey(); X509Certificate certificate = keyPair.getSelfCertificate(x500Name, 20*365*24*60*60); Certificate[] chain = { certificate }; keyStore.setEntry(commonName, privateKey, “secret”.toCharArray(), chain); } 只要密钥库中只有一个密钥和证书,这一切都可以正常工作。 一旦你有多个密钥,当你尝试连接时会发生奇怪的事情: java.io.IOException: HTTPS hostname wrong: should be 这是一个非常神秘的错误,但我终于设法通过编写连接到服务器的unit testing来跟踪它,并断言证书上的CN与主机名匹配。 我发现的很有趣 – Jetty似乎随意选择向客户提供哪种证书,但是以一致的方式。 例如: […]

检查java密钥库中的证书过期日期

我的java应用程序使用密钥库文件,其中我有一个证书,用于与活动目录服务器的ssl连接。 我要做的是检查其到期日期并提示用户是否即将到期。 我的申请开始时我必须这样做。 我的想法是使用外部程序:keytool在密钥库中显示有关某些证书的信息,然后对keytool输出的字符串进行一些解析操作以查找此validation日期。 这是特定keytool命令的输出: Owner: Issuer: CN=CPD Root CA, DC=cpd, DC=local Serial number: 39e8d1610002000000cb Valid from: Wed Feb 22 21:36:31 CET 2012 until: Thu Feb 21 21:36:31 CET 2013 Certificate fingerprints: MD5: 82:46:8B:DB:BC:5C:64:21:84:BB:68:E3:4B:D4:35:70 SHA1: 35:52:CA:F2:11:66:1E:50:63:BC:53:A5:50:C1:F0:1E:62:81:BC:3F Signature algorithm name: SHA1withRSA 问题在于解析日期,因为我无法确定它的显示格式。 有没有更简单的方法来检查java密钥库文件中包含的证书的到期日期?

如何通过OSGi(karaf)API和自定义trustManager注册webservice

我正在研究通过以下调用注册WS的软件: initiatingBundle.getBundleContext() .registerService( interfaces, serviceObject, this.convertMapToDictionary( initiatingBundle.getBundleContext(), serviceAttributes ) ); 这是OSGi API的帮助 : org.osgi.framework.BundleContext ServiceRegistration registerService(java.lang.String[] clazzes, java.lang.Object service, java.util.Dictionary properties) 是否有任何方法(使用properties属性的示例)来创建具有自定义TrustManager的Web服务,如下所示? TrustManager trustManager = new X509TrustManager() { @Override public void checkClientTrusted( X509Certificate[] x509Certificates, String s ) throws CertificateException { System.out.println( “=== interception point at checkClientTrusted ===” ); System.out.println( x509Certificates[0].getSubjectDN().getName() ); System.out.println( “================================================” ); throw […]

android gcm服务器中的ssl握手exception

嗨朋友我是android新手。 我正在尝试创建gcm服务器。 我的代码是 System.setProperty(“javax.net.ssl.trustStore”,”/usr/bin/keystore.jks”); String id = “cliend id”; String msg = “Test”; Sender sender = new Sender(Api key); Message message = new Message.Builder() .addData(“message”, “this is the message”) .addData(“other-parameter”, “some value”) .build(); Result result; result = sender.sendNoRetry(message, id); 我创建密钥库但仍然有如下错误: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested […]

启用S​​SL证书validationJVM

问题很简单。 执行以下代码后,如何重新启用SSL证书validation? // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) { } public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust […]

收到致命警报:unknown_ca,同时进行相互身份validation

我正在开发一个Web服务客户端,它需要与启用了相互身份validation的服务器通信。 我已经完成了以下步骤。 将服务器证书(自签名)添加到信任库,并使用SSLSocketFactory将其设置为HttpsURLConnection 。 将客户端证书(CA签名)提供给服务器管理员以将其添加到其受信任的存储中。 通过导入客户端证书创建了一个密钥库,并创建了一个密钥管理器来“HttpsURLConnection”。 当我尝试运行此示例时,我得到一个例外说法 org.springframework.ws.soap.axiom.AxiomSoapMessageException: Could not write message to OutputStream: java.net.SocketException: Software caused connection abort: recv failed; nested exception is javax.xml.stream.XMLStreamException: java.net.SocketException: Software caused connection abort: recv failed at org.springframework.ws.soap.axiom.AxiomSoapMessage.writeTo(AxiomSoapMessage.java:261) at org.springframework.ws.transport.AbstractWebServiceConnection.send(AbstractWebServiceConnection.java:45) at org.springframework.ws.client.core.WebServiceTemplate.sendRequest(WebServiceTemplate.java:586) at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:549) at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:502) at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:480) at test.SamlTest.request(SamlTest.java:29) at test.SamlTest.main(SamlTest.java:63) Caused by: javax.xml.stream.XMLStreamException: java.net.SocketException: Software caused connection […]

弹性负载均衡器和https

我正在使用Elastic Beanstalk,我在使用SSL配置时遇到了一些麻烦。 我现在有一个由Load Balancer和一个EC2实例组成的环境。 负载均衡器在端口443和80上有侦听器。环境中的EC2实例在端口80上运行tomcat。我在负载均衡器中有一个证书,我可以在端口443和80上访问该站点,一切都是工作得很好。 问题是我希望所有请求都被重定向到端口443,即使是端口80上的请求。我已经搜索了高低,以便在不改变我的安全配置的情况下执行此操作。 这是一个运行在Tomcat 7上的小型webapp,带有Spring安全性和MVC。 我试过用 但我有几个页面不属于filter链的一部分 这似乎可以在负载均衡器上解决,但我没有太多设置SSL的经验。 任何帮助表示赞赏。

使用SSL和自签名证书使JMX在Tomcat 7下运行

我正在尝试使用SSL在Tomcat 7.0.23下运行JMX。 服务器位于AWS中,这意味着所有主机都是NAT,我需要使用JmxRemoteLifecycleListener来显式设置JMX使用的两个端口。 我一直在做很多关于这个主题的阅读,但我不能让所有的部分正确地协同工作。 没有SSL,我可以让JMX正常工作。 我已经为我的Tomcat版本下载了catalina-jmx-remote.jar的版本,并将其安装在我的tomcat / lib目录中。 我的server.xml包含: 当我使用以下设置启动Tomcat时,我可以使用不安全的会话进行连接: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.password.file=/path/to/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/path/to/jmxremote.access -Djava.rmi.server.hostname= -Dcom.sun.management.jmxremote.ssl=false 但是,如果我将这些更改为以下,那么我无法建立SSL连接: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.password.file=/path/to/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/path/to/jmxremote.access -Djava.rmi.server.hostname= -Dcom.sun.management.jmxremote.ssl=true -Dcom.sun.management.jmxremote.ssl.need.client.auth=false -Dcom.sun.management.jmxremote.authenticate=true -Djavax.net.ssl.keyStore=/path/to/keystore.dat -Djavax.net.ssl.keyStorePassword= -Djavax.net.ssl.trustStore=/path/to/truststore.dat -Djavax.net.ssl.trustStorePassword= keystore.dat只包含一个通过以下方式创建的证书: openssl x509 -outform der -in cert.pem -out cert.der keytool -import -alias tomcat -keystore keystore.dat -file cert.der -storepass truststore.dat包含java cacerts的完整副本以及我自签名证书的CA证书: cp $JAVA_HOME/jre/lib/security/cacerts truststore.dat keytool -storepasswd -storepass changeit -new […]

rest轻松https电话,如何接受所​​有证书

我试图通过以下方式使用jboss rest来调用REST服务 public ETTestCasePackage getPackageById(String packageId) throws PackageNotFound { ClientRequest req = new ClientRequest(“https://facebook/api”); req.header(“Authorization”, “Basic ” + EztrackerConstants.base64AuthenticationValue); req.pathParameter(“id”, packageId); ETTestCasePackage etPackage = null; try { logger.info(“invoking “+req.getUri()); //ProxyFactory.create ClientResponse res = req.get(ETTestCasePackage.class); etPackage = res.getEntity(); } catch (Exception e) { logger.debug(“Not able to retrieve details for testcase package having id = ” + […]

信任过期的证书

在与具有过期证书的https服务器通信时,我的客户端失败并出现以下错误。 虽然我们正在等待通过更新来修复服务器端,但我想知道我们是否可以通过将过期的证书添加到我们自己的信任存储来传递此错误? 这样我们就可以在等待续订证书的同时获得一些测试时间。 US has an end date Thu Sep 08 19:59:59 EDT 2011 which is no longer valid. [4/17/13 19:22:55:618 EDT] 00000021 SystemOut O WebContainer : 0, SEND TLSv1 ALERT: fatal, description = certificate_unknown [4/17/13 19:22:55:620 EDT] 00000021 SystemOut O WebContainer : 0, WRITE: TLSv1 Alert, length = 2 [4/17/13 19:22:55:620 EDT] 00000021 SystemOut […]