我试图通过Jersey Client调用HTTPS REST API。 在开发过程中,我偶然发现了以下错误: Exception in thread “main” com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching mvn.signify.abc.com found at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149) at com.sun.jersey.api.client.Client.handle(Client.java:648) at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670) at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503) at com.lftechnology.sbworkbench.utility.utils.PingFederateUtility.main(PingFederateUtility.java:32) Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching mvn.signify.abc.com found 所以我把它搞砸了一下,找到了大量的解决方案,实际上有效。 使用Jersey客户端的HTTPS https://gist.github.com/outbounder/1069465 如何修复“java.security.cert.CertificateException:没有主题替代名称出现”错误? http://www.mkyong.com/webservices/jax-ws/java-security-cert-certificateexception-no-name-matching-localhost-found/ http://java.globinch.com/enterprise-java/security/fix-java-security-certificate-exception-no-matching-localhost-found/ 他们处于不同的领域,但他们有一个共同的解决方案来解决它。 脚本 我目前在开发环境中使用自创的自签名证书。 因此它必然会出现问题。 题 上述解决方案侧重于跳过/允许validation所有证书。 但是当我将它移动到生产环境时,我可以从可信赖的来源访问有效签名证书。 当我转向生产时,这些解决方案是否有任何帮助? 可以跳过SSLvalidation吗? 为开发和生产环境实现通用解决方案的另一种替代方法是什么? PS […]
如何将java创建的SSL证书导入Eclipse中的项目?
我按照他们的指南使用RSA( 如何在Spring上配置SSL / HTTPS? )在我的Spring Boot服务器上设置SSL: 使用keytool -genkey -alias -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650创建了一个新的密钥库和密钥keytool -genkey -alias -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 将这些行放在我的application.properties文件中: server.port: 8443 server.ssl.key-store: classpath:keystore.p12 server.ssl.key-store-password: server.ssl.key-password = server.ssl.keyStoreType: PKCS12 server.ssl.keyAlias: 奇迹般有效。 但是当我通过运行keytool -genseckey -keystore keystore.jck -storetype JCEKS -storepass -keyalg AES -keysize 256 -alias […]
我一直试图让一个双向的ssl / https代理与Camel一起工作。 我已经能够使用双向ssl设置Jetty组件,现在我正在尝试使用Http4组件来完成代理的客户端。 当我将docker流量路由到日志组件时,一切都很顺利,2路ssl信任链也没问题。 当我抛出Http4组件时,它会爆发一个未经过身份validation的对等exception。 我使用的是Camel 2.7.0 这是我到目前为止所拥有的 public static void main(String[] args) throws Exception { CamelContext context = new DefaultCamelContext(); JettyHttpComponent jetty = context.getComponent(“jetty”, JettyHttpComponent.class); SslSelectChannelConnector sslConnector = new SslSelectChannelConnector(); sslConnector.setPort(9443); sslConnector.setKeystore(“/home/brian/jboss.keystore”); sslConnector.setKeyPassword(“changeit”); sslConnector.setTruststore(“/home/brian/jboss.truststore”); sslConnector.setTrustPassword(“changeit”); sslConnector.setPassword(“changeit”); sslConnector.setNeedClientAuth(true); Map connectors = new HashMap(); connectors.put(9443, sslConnector); jetty.setSslSocketConnectors(connectors); final Endpoint jettyEndpoint = jetty.createEndpoint(“jetty:https://localhost:9443/service”); KeyStore keystore = […]
我们最近更新了一个从Java 6到Java 8的项目,现在我们已经打了一个关于SSL握手的问题。 服务层使用客户端来请求和接收来自第三方应用程序的呼叫。 在服务层中,使用初始化密钥库 System.setProperty(“javax.net.ssl.trustStore”, keyStoreFile); System.setProperty(“javax.net.ssl.trustStorePassword”, keyStorePassword); 并通过applicationContext.xml注入: 奇怪的是:1。显然,这不是一个完整的文件路径。 2.此服务器上没有密钥库(无论Java 6如何,它都可以工作)。 如果出现错误,客户端应该信任所有证书: /** * Sets a trust manager that ignores the certificate chains. Use if the * server has a certificate that can’t be verified. * */ private void trustHttpsCertificates() throws Exception { try { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); // Create a trust manager that […]
我需要从Java网站上的SSL证书中提取到期日期,应该支持可信和自签名证书,例如:1.trusted https://github.com 2.self-signed https://mms.nw .RU / 我已经将一些代码复制为: import java.net.URL; import java.security.SecureRandom; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; public class SSLTest { public static void main(String [] args) throws Exception { // configure the SSLContext with a TrustManager SSLContext ctx = SSLContext.getInstance(“TLS”); […]
我目前正在尝试使用CloseableHttpClient同时执行多个HttpGet请求。 我搜索了如何做到这一点,答案是使用PoolingHttpClientConnectionManager 。 此时我得到了这个: PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager(); CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(cManager) .build(); 然后我尝试了http://www.google.com的HttpGet请求,一切正常。 然后我通过cmd创建了一个信任库并导入了目标网站的证书,用我的信任库设置了SSLConnectionSocketFactory并设置了httpClient的SSLSocketFactory : KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream inputStream = new FileInputStream(new File(“myTrustStore.truststore”)); trustStore.load(inputStream, “nopassword”.toCharArray()); inputStream.close(); SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(trustStore).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager(); CloseableHttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(sslsf) .setConnectionManager(cManager) .build(); 如果我尝试执行Https HttpGet那么我会得到一个PKIX […]
我在客户端使用Spring RESTTemplate来调用REST端点。 在这种情况下,客户端是Spring应用程序,Tomcat是servlet容器。 我遇到了与HTTPS端点建立连接的问题。 我收到一个错误,表明它找不到信任库的有效路径。 我在哪里可以指定这个? 这是在容器级别还是应用程序配置(Spring)级别完成的? 堆栈跟踪: org.springframework.web.client.ResourceAccessException: I/O error: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is 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 target org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:330) org.springframework.web.client.RestTemplate.execute(RestTemplate.java:292) org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:227)
如何使用javax.xml.ws.Service在JAX-WS客户端中禁用证书validation? 我尝试在SSLSocketFactory中创建一个完全信任的TrustManager,并尝试将其与BindingProvider绑定 SSLContext sc = SSLContext.getInstance(“SSL”); sc.init(null, trustAllCerts, new java.security.SecureRandom()); Map ctxt = ((BindingProvider) wsport ).getRequestContext(); ctxt.put(JAXWSProperties.SSL_SOCKET_FACTORY, sc.getSocketFactory()); 但我仍然得到Exception: unable to find valid certification path to requested target 但它只在我使用时有效 HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 或者有没有办法让javax.xml.ws.Service使用我创建的HttpsURLConnection ?
我是安全服务器的新手,所以我对此并不太了解,但我需要让我在Spring Ocean Droplet上运行的Spring Boot应用程序使用HTTPS。 我的想法是注册一个letsencrypt证书然后告诉Spring使用它。 但是,我不知道该怎么做。 谢谢。