Tag: keystore

将证书链添加到p12(pfx)证书

我在java和cxf中有应用程序,它使用客户端证书连接到WebServices。 我从WebService所有者那里获得了证书 certificate.p12 certificate.pem certificate.crt trusted_ca.cer root_ca.cer 我有问题,直接将此p12证书转换为java要求的工作jks密钥库。 我这样做了: keytool -importkeystore -srckeystore certificate.p12 -srcstoretype PKCS12 -destkeystore certificate1.jks -deststoretype JKS -storepass secret keytool -import -alias root -file root_ca.cer -trustcacerts -keystore certificate1.jks -storepass secret keytool -import -alias trusted -file trusted_ca.cer -trustcacerts -keystore certificate1.jks -storepass secret 但这个jks不起作用,我在使用这个certificate1.jks时得到HTTP响应’403:Forbidden’ 但是,如果我将此p12(pfx)证书导入Internet Explorer,然后将此证书从IE导出为pfx格式,选择“在证书路径中包含所有证书”复选框并使用: keytool -importkeystore -srckeystore certificate.pfx -srcstoretype PKCS12 -destkeystore certificate2.jks -deststoretype […]

Java密钥库是否可以导入OpenSSL生成的密钥对?

我使用openssl生成一个认证密钥。 这是我的命令: openssl genrsa -des3 -out enc_key.pem 1024 我导出到cer文件,然后使用java keytool我导入到java密钥库(jks)。 密钥库听起来不错。 我可以从我的Java应用程序加载密钥库。 问题是当客户端连接到服务器时(在这种情况下是FTP服务器,而不是Web服务器,我使用apache mina),发生exception: javax.net.ssl.SSLHandshakeException:SSL握手失败。 org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:433)位于org.apache.mina.core的org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) .filterchain.DefaultIoFilterChain.access $ 5(DefaultIoFilterChain.java:429) … 引起:javax.net.ssl.SSLHandshakeException:在com.sun.net.ssl.ssl.inl.ssl.SSLEngineImpl的com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(未知来源)中没有共同的密码套件来自com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(未知来源)的.checkTaskThrown(未知来源)位于javax.net的com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(未知来源) .ssl.SSLEngine.wrap(未知来源) … 引起:javax.net.ssl.SSLHandshakeException:在com.sun.net.ssl.inl.ssl.SSLEngineImpl的com.sun.net.ssl.internal.ssl.Alerts.getSSLException(未知来源)中没有共同的密码套件.fatal(未知来源) 我想问一些事情: 我使用openssl生成的认证密码是什么? 我们怎么知道? 也许通过命令行openssl xxx? 我去http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA 。 我把SSL_RSA_xxx设置为启用密码套件,但仍然无法工作(我把SSL_RSA放在SSL,因为SSL使用的是ssl implisit,而genrsa,只是我的意见genrsa生成RSA)。 这是对的吗? 有人知道解决方案吗? 或者,任何人都知道如何从openssl命令行生成标准密钥库,直到可以在java应用程序中使用(当然使用密码)。 因为我现在可以从openssl和export keystore java生成认证,但我不知道我使用的密码是什么以及我在java应用程序中的使用方式。 注意:如果密钥库直接从java生成,我可以运行。 现在问题是如果java keytool生成的密钥库来自认证,如openssl(和其他可能)。 任何帮助将不胜感激! 谢谢

在文件系统上直接使用PEM编码CA证书进行HTTPS请求?

这类似于将PEM导入Java密钥库 。 但问题的答案使用OpenSSL进行转换和工具,将它们导入文件系统的密钥存储区。 我正在尝试使用格式良好的X509证书作为信任锚: static String CA_FILE = “ca-rsa-cert.pem”; public static void main(String[] args) throws Exception { KeyStore ks = KeyStore.getInstance(“JKS”); ks.load(new FileInputStream(CA_FILE), null); TrustManagerFactory tmf = TrustManagerFactory .getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ks); SSLContext context = SSLContext.getInstance(“TLS”); context.init(null, tmf.getTrustManagers(), null); // Redirected through hosts file URL url = new URL(“https://example.com:8443”); HttpsURLConnection connection = (HttpsURLConnection) url .openConnection(); connection.setSSLSocketFactory(context.getSocketFactory()); … […]

在java中validation证书会引发exception – 无法找到所请求目标的有效证书路径

我有一个Web应用程序,要求客户端发送它的证书,服务器必须validation证书(即查看颁发者是否是有效的颁发者并出现在服务器的信任库中)。 这是代码: FileInputStream fin=new FileInputStream(“C:/trustedca”); KeyStore anchors = KeyStore.getInstance(“JKS”,”SUN”); anchors.load(fin, “server”.toCharArray()); X509CertSelector target = new X509CertSelector(); FileInputStream fin1=new FileInputStream(“C:/client.crt”); CertificateFactory cf=CertificateFactory.getInstance(“X.509”); X509Certificate cert=null; while (fin1.available() > 0) { System.out.println(“in while———“); cert =(X509Certificate) cf.generateCertificate(fin1); } target.setCertificate(cert); PKIXBuilderParameters params = new PKIXBuilderParameters(anchors, target); CertPathBuilder builder = (CertPathBuilder) CertPathBuilder.getInstance(“PKIX”).build(params); PKIXCertPathBuilderResult r = (PKIXCertPathBuilderResult) builder.build((CertPathParameters)params); 但我得到一个例外: sun.security.provider.certpath.SunCertPathBuilderException: unable to […]

在同一JVM上设置多个信任库

我有一个在weblogic服务器上运行的Java应用程序。 该应用程序有两个不同的模块,使用SSL连接到外部Web服务 – 比如模块A和模块B. 模块A – 基于轴构建 – 使用信任库A Moudle B – 基于Spring-ws构建 – 使用信任库B. 模块A存在。 正在介绍模块B. 我需要能够根据调用的模块在JVM中动态设置信任库。 由于某些限制,我没有选项 – 创建自定义密钥管理器。 – 使用一个信任库 我尝试使用System.setProperty im Module B codebase来设置truststore。 但是,仅当模块B首先被调用时才有效。 例如 – 假设我重新启动JVM然后调用模块A – 它在JVM中设置它自己的信任库然后我调用模块B – 它失败 – 它没有在JVM中设置它自己的信任库,即使我已经使用过System.setProperty方法。 我错过了什么,或者只是System.setProperty不会覆盖现有的设置值。 如果是这样,我的选择在这里。

仅使用SS证书和CA证书而不使用密钥库

我需要设置一个javax.net.ssl.SSLContext ,以便在Jersey-Client应用程序中使用。 我想要做的就是接受自定义根证书的上下文。 是否真的无法生成密钥库文件并导入CA证书?

Java:通过资源加载SSL密钥库

如果我有: System.setProperty(“javax.net.ssl.keyStore”, ‘/etc/certificates/fdms/WS1001237590._.1.ks’); System.setProperty(“javax.net.ssl.keyStorePassword”, ‘DV8u4xRVDq’); System.setProperty(“sun.security.ssl.allowUnsafeRenegotiation”, “true”); 我能够毫无问题地打开安全连接。 但是,我想将证书直接存储在战争中,所以我使用:(文件输入流最终将成为资源流,但我这样做是为了让它工作。) System.setProperty(“sun.security.ssl.allowUnsafeRenegotiation”, “true”); KeyStore ks = KeyStore.getInstance(“JKS”); ks.load(new FileInputStream(“/etc/certificates/fdms/WS1001237590._.1.ks”), “DV8u4xRVDq”.toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(“SunX509”); kmf.init(ks, “DV8u4xRVDq”.toCharArray()); SSLContext sc = SSLContext.getInstance(“TLS”); sc.init(kmf.getKeyManagers(), null, null); 现在,如果我打开相同的连接,我得到: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure