Tag: 证书

如果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密钥库文件中包含的证书的到期日期?

Keytool设置主机名

我只是试图使用java keytool,但我无法弄清楚如何设置主机名。 这就是我尝试的方式: hostname[username:/this/is/a/path][640]% keytool -keystore server.keystore -genkeypair -alias hostname Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: hostname What is the name of your organizational unit? [Unknown]: hostname What is the name of your organization? [Unknown]: hostname What is the name of your City or Locality? [Unknown]: hostname […]

将Windows证书导入Java

我有一个java服务器试图通过SSL连接到外部Ldap服务器(作为客户端,以执行查询)。 我连接时遇到问题,因为他们在连接时发送给我的证书只在我的本地Windows Truststore中受信任,但在java truststore(cacerts)中不存在。 有没有办法告诉Java信任Windows可信任的任​​何证书? 或者,有没有办法将所有受信任的证书从Windows信任库导入Java的cacerts? 任何想法将不胜感激。

Java证书客户端SSL:无法找到所请求目标的有效证书路径

我们需要客户端身份validation才能向我们的某些Web服务发送RESTful请求。 我已经通过密钥工具在我的本地mac os上安装了客户端证书(.pem)和密钥。 这些都不是自签名的。 openssl pkcs12 -export -name myservercert -in not_self_signed.crt -inkey server.key -out keystore.p12 …并转换为JKS格式 keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert 我正在尝试构建一个Java客户端来进行身份validation。 这是我到目前为止所提出的: import java.io.FileInputStream; import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; import org.apache.http.util.EntityUtils; public class TestClientCustomSSL { public […]

无法将证书导入java控制面板

我正在尝试将自签名证书导入java控制面板中的受信任证书。 它位于安全选项卡 – >管理证书下。 无论我在密钥库上设置的密码有多简单,导入程序总是告诉我输入后我的密码无效。我也尝试更改证书类型但没有运气..我试了所有这些。 以下是我用来创建文件的简单步骤 keytool -genkey -keyalg RSA -keysize 2048 -keystore test_keystore.jks -alias test 然后我生成我的CSR文件,java控制面板将其作为输入 keytool -certreq -alias test -keystore test_keystore.jks -file test_certificate_request.csr 由于这只是一个测试,我设置的密码非常简单,所以它不是使用错误密码或输入错误的问题。 然而,每当我导入test_certificate_request.csr文件时,我创建它就会告诉我密码无效。 如果重要,这里是我点击“更多信息”按钮时从导入程序生成的完整strack跟踪。 java.io.IOException: toDerInputStream rejects tag type 45 at sun.security.util.DerValue.toDerInputStream(Unknown Source) at sun.security.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source) at java.security.KeyStore.load(Unknown Source) at com.sun.deploy.panel.CertificatesDialog.importPKCS12Certificate(Unknown Source) at com.sun.deploy.panel.CertificatesDialog.importButtonActionPerformed(Unknown Source) at com.sun.deploy.panel.CertificatesDialog.access$200(Unknown Source) at com.sun.deploy.panel.CertificatesDialog$4.actionPerformed(Unknown Source) […]

Java签名jar与服务器证书

是否可以使用服务器证书签署java Web启动应用程序? 我想知道的是它是否有效。 我的服务器有一个可靠的证书,我想重复使用相同的证书来签署一个应用程序。 现在,我有这个警告: 此jar包含其签名者证书的ExtendedKeyUsage扩展不允许代码签名的条目。 此jar包含签名者证书的NetscapeCertType扩展不允许代码签名的条目。 我是否可以启动我的应用程序,而不会警告证书不受信任?

使用java的X509序列号

我需要从X509证书中获取一些数据。 如果我在Windows中打开证书文件,它会以此格式显示其序列号。 ex. 39 65 70 eb d8 9f 28 20 4e c2 a0 6b 98 48 31 0d 我试图使用java获取相同的数据。 加载后,我使用 x509.getSerialNumber(); and result is : 76292708057987193002565060032465481997 那么这两者有什么区别? 我希望结果为上一个。

Java jnlp应用程序被安全设置阻止

我有一个企业java应用程序,它有大量的jars,通过jnlp文件下载到客户端的jvm缓存中。 当我启动应用程序时,我在Java控制台上获得以下堆栈跟踪: Exception in thread “AWT-EventQueue-1” java.lang.NullPointerException at com.sun.deploy.ui.DialogTemplate.imageAvailable(Unknown Source) at com.sun.deploy.ui.DialogTemplate.finalImageAvailable(Unknown Source) at com.sun.deploy.ui.ImageLoader$2.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$200(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) […]

当我尝试使用证书转换字符串时,会引发exception

我有一个applet,用于签署文档,并将文档,签名和证书发送到服务器端。 在服务器端portlet接收这3个文件,所有文件都以base64格式存储,但是当我尝试获取证书时它会引发exception java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:104) applet边码: public static byte[] certificate; public static String getCertificateString() { String str = “”; byte[] result = null; result = Base64.encode(certificate); for (int i = 0; i < result.length; i++) { str += (char) (result[i]); } return str; } //initialization of certificate from […]