Tag: pki

x509certificate certpathvalidation

我们的用例要求在PKIX设置上通过OCSPvalidation证书撤销。 我的出发点是这个相关问题的代码: 客户证书上的OCSP撤销 我在应用程序级别手动执行它,因为tomcat不支持它。 但是,我在构建certPath时遇到了一些麻烦,我想我缺少一些基本的理解。 首先,我尝试为传入的客户端x509Certificate创建certPath。 KeyStore存储已正确初始化,仅包含与客户端x509Certificate匹配的根证书。 编辑:我添加中间证书后得到了相同的结果。 X509CertSelector certSelector = new X509CertSelector(); certSelector.setSubject(x509certificate.getSubjectX500Principal()); PKIXParameters params = new PKIXBuilderParameters(store,certSelector); CertPathBuilder cpb = CertPathBuilder.getInstance(CertPathBuilder.getDefaultType()); CertPath certPath = cpb.build(params).getCertPath(); 但是,我在运行时遇到错误: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 可能会遗漏什么?

实现X509TrustManager – 将部分validation传递给现有validation程序

我需要忽略PKIX路径构建exception javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExc ption: unable to find valid certification path to requested target 我知道如何通过编写我自己的实现X509TrustManager的类来实现这一点,我总是从isServerTrusted return true 。 但是,我不想信任所有服务器和所有客户端。 我希望像当前​​一样为客户端完成所有默认validation。 对于服务器,我想忽略仅针对一个特定证书的服务器证书validation,但是希望继续进行validation,就像当前所做的那样(例如,使用cacerts商店)。 我怎样才能实现这样的目标 – 即在我更换之前将部分validation传递给X509TrustFactory对象。 这就是我想要做的 public boolean isServerTrusted(X509Certificate[] chain) { if(chain[0].getIssuerDN().getName().equals(“MyTrustedServer”) && chain[0].getSubjectDN().getName().equals(“MyTrustedServer”)) return true; // else I want to do whatever verification is normally done } 另外我不想打扰现有的isClientTrustedvalidation。 我怎样才能做到这一点?

与Web服务的相互身份validation

目前,只要客户端使用Web浏览器访问网站,我就成功实现了相互身份validation安全性,因为浏览器会为您处理所有证书交换。 现在,我需要创建一个安全的界面,用户可以使用服务器所需的相互身份validation通过HTTPS访问Web服务。 首先,有没有人知道的资源可以帮助我吗? 我已经找了很长时间,一无所获。 任何其他人可以给我如何解决这个问题的提示? 其次,我认为我最大的障碍是我对如何处理证书缺乏了解。 如何协商接受服务器的密钥并将自己的密钥提供给服务器? 这是Java。

Java X509证书解析和validation

我试图在几个步骤中处理X509证书并遇到几个问题。 我是JCE的新手,所以我还没有完全了解所有内容。 我们希望能够根据不同的编码(PEM,DER和PCKS7)解析几个不同的X509证书。 我使用FireFox(证书包括链)以PEM和PCKS7格式从https://belgium.be导出相同的证书。 我已经留下了一些问题所不需要的线条 public List parse(FileInputStream fis) { /* * Generate a X509 Certificate initialized with the data read from the inputstream. * NOTE: Generation fails when using BufferedInputStream on PKCS7 certificates. */ List certificates = null; log.debug(“Parsing new certificate.”); certificates = (List) cf.generateCertificates(fis); return certificates; } 只要我使用FileInputStream而不是PCKS7的BufferedInputStream,这段代码工作正常,我觉得这很奇怪? 但我可以忍受它。 下一步是validation这些证书链。 1)检查所有证书是否都有有效日期(简单)2)使用OCSPvalidation证书链(如果证书中未找到OCSP URL,则回退到CRL)。 这是我不完全确定如何处理这个问题的地方。 […]

来自CA的PKCS12 Java密钥库和java中的用户证书

我最近负责用Java模拟Apple产品(iPhone配置实用程序)。 我一直有点困惑的部分之一是关于Exchange ActiveSync的一部分。 在那里,它允许您从钥匙串中选择一个证书作为您的EAS帐户的凭据。 经过一些研究,我发现它实际上是在创建一个PKCS12密钥库,插入我选择的证书的私钥,并将其编码为XML。 到目前为止还没什么大不了的。 如果我使用Keychain Access创建一个.p12文件,它上传没有问题。 但是当我尝试将其转移到Java时,我遇到了一个问题。 假设我将之前使用过的.s12文件中的一个作为.cer文件导出(这是我们期望在环境中获得的)。 现在当我将它上传到Java时,我得到一个Certificate对象如下… KeyStore ks = java.security.KeyStore.getInstance(“PKCS12”); ks.load(null, “somePassword”.toCharArray()); CertificateFactory cf = CertificateFactory.getInstance(“X.509”, new BouncyCastleProvider()); java.security.cert.Certificate userCert = cf.generateCertificate(new FileInputStream(“/Users/me/Desktop/RecentlyExportedCert.cer”)); 但是当我尝试…… ks.setCertificateEntry(“SomeAlias”, userCert); 我得到例外…… java.security.KeyStoreException: TrustedCertEntry not supported 所以从证书我转移到键。 但是使用这些证书(我也获得了CA证书),我只能访问公钥,而不是私钥。 如果我试图像这样添加公钥… java.security.cert.Certificate[] chain = {CACert}; ks.setKeyEntry(“SomeAlias”, userCert.getPublicKey().getEncoded(), chain); 我明白了…… java.security.KeyStoreException: Private key is not stored as PKCS#8 […]