Tag: certificate

如何以编程方式将可信证书导入现有密钥库?

我需要将一个可信证书导入到一个已经存在的密钥库中,这是我的代码,但它给我一个EOFException,可能是什么错误? public void importTrustedCertificate( String alias, byte [] trustedCertificate ) throws Exception { KeyStore keyStore = KeyStore.getInstance( “JKS” ); FileInputStream fileInputStream = new FileInputStream( “keystore” + File.separator + “ClientRegistrarKeyStore.jks” ); FileOutputStream fileOutputStream = new FileOutputStream( “keystore” + File.separator + “ClientRegistrarKeyStore.jks” ); keyStore.load( fileInputStream, “keystore”.toCharArray() ); keyStore.setCertificateEntry( alias, new X509Certificate( trustedCertificate ) ); keyStore.store( fileOutputStream, “keystore”.toCharArray() […]

使用JNA获取本地计算机证书

我正在尝试从本地计算机Windows商店获取证书。 想要获得的是“证书(本地计算机) – >个人 – >证书”中的证书。 我使用此代码访问路径“证书 – 当前用户 – >个人 – >证书”中的证书 NativeLibrary crypt32 = NativeLibrary.getInstance(“Crypt32”); Function functionCertOpenSystemStore = crypt32.getFunction(“CertOpenSystemStoreA”); Object[] argsCertOpenSystemStore = new Object[] { 0, “MY”}; HANDLE h = (HANDLE) functionCertOpenSystemStore.invoke(HANDLE.class, argsCertOpenSystemStore); 有关如何从“证书(本地计算机) – >个人 – >证书”获取证书的任何想法? 我正在尝试使用JNA,因为我读取的不可能从Java访问本地机器证书。 我唯一得到的就是使用密钥库获取“当前用户”证书,如下所示: KeyStore ks = KeyStore.getInstance(“Windows-MY”, “SunMSCAPI”); 我也试过这个: KeyStore ks = KeyStore.getInstance(“Windows-ROOT”, “SunMSCAPI”); 有人能给我一个线索吗?

为什么我的密钥标识符不匹配?

我正在尝试解密S / MIME电子邮件(最初通过Outlook发送),为此,我正在使用bouncycastle API。 不过,我遇到了困难。 我在Windows证书存储区中有收件人的证书。 我之前用它将签名和加密的电子邮件发送给另一方,然后他们用它向我发送加密回复。 然后我将证书(带私钥)导出为.pfx文件,然后将此pfx文件加载到Java KeyStore中。 但是,它不起作用,我怀疑这是因为主题密钥标识符不匹配。 这是我用来从KeyStore获取主题密钥id的代码: KeyStore ks = KeyStore.getInstance(“PKCS12”); char[] pw = “password”.toCharArray(); ks.load(new FileInputStream(“d:\\cert_priv_key.pfx”), pw); Enumeration en = ks.aliases(); while( en.hasMoreElements() ) { String alias = (String)en.nextElement(); System.out.println(alias); if( ks.isKeyEntry(alias) ) { Certificate[] chain = ks.getCertificateChain(alias); X509Certificate cert = (X509Certificate)chain[0]; byte[] id = cert.getExtensionValue(“2.5.29.14″); System.out.println(” ” + toHex(id)); […]

SunMSCapi的applet不能在linux下工作

我们已经为我们的网站创建了一个新网站,我们让用户使用我们设计的applet签署pdf文档。 问题是这个小程序仅在Windows操作系统中正常工作,我们希望将其扩展到Linux操作系统。 当我们在linux中运行applet时,我们收到以下错误消息: [opensc-pkcs11] reader-pcsc.c:896:pcsc_detect_readers:SCardListReaders失败:0x8010002e [opensc-pkcs11] reader-pcsc.c:1015:pcsc_detect_readers:返回:找不到读者[opensc-pkcs11] reader-pcsc.c :896:pcsc_detect_readers:SCardListReaders失败:0x8010002e [opensc-pkcs11] reader-pcsc.c:1015:pcsc_detect_readers:返回:没有读者发现java.security.NoSuchProviderException:没有这样的提供者:SunMSCAPI在sun.security.jca.GetInstance。 sun.security.jca.GetInstance.getInstance(未知来源)中的getService(未知来源) 我认为当我们尝试在我们的代码中使用此调用来读取存储在Windows操作系统中的证书时,问题就出现了: KeyStore keystore = KeyStore.getInstance(“Windows-MY”, “SunMSCAPI”); keystore.load(null, null); return keystore; 这是我们用来获取证书列表的函数。 public KeyStore obtenerCertificados() throws Exception { String osNombre = System.getProperty(“os.name”); String osArquitectura = System.getProperty(“os.arch”); String providerConfig = null; String configuracionPKCS11 = null; // LINUX if(osNombre.contains(new StringBuffer(“Linux”))) providerConfig = “name = OpenSC\nlibrary = […]

使用Bouncy Castle在Java中创建自定义X509 v3扩展

我已成功使用Bouncy Castle的X509v3CertificateBuilder Java类创建带有标准V3扩展的X509证书。 我现在正在尝试使用自定义扩展创建证书。 我可以使用addExtension(…)方法创建自定义扩展,但是,证书中的结果值不是我想要的。 例如,我希望在自定义OID 1.2.3.4下的证书中列出这些确切的八位字节:“00 00 00 00 FF FF FF FF”。 我尝试的所有内容都包含ASN1编码的八位字符串,最终为“04 08 00 00 00 00 FF FF FF FF”。 基本上,我想在Java中创建一个带有自定义扩展的证书,该扩展看起来与使用具有此配置的扩展文件使用OpenSSL创建时证书的外观相同: 1.2.3.4=DER:00:00:00:00:FF:FF:FF:FF 这可以用X509v3CertificateBuilder类以干净的方式完成吗? 下面是一段创建“不正确”值的代码片段。 // Raw value to place in cert for OID 1.2.3.4. byte[] bytearray = {0, 0, 0, 0, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}; ASN1ObjectIdentifier asn1oid […]

使用有效的客户端证书时HttpClient 403错误

我正在尝试使用Java在网站上自动执行某些任务。 我有一个有效的网站客户端(当我使用firefox登录时工作),但当我尝试使用http客户端登录时,我一直收到403错误。 请注意,我希望我的信任商店信任任何东西(我知道它不安全,但此时我并不担心)。 这是我的代码: KeyStore keystore = getKeyStore();//Implemented somewhere else and working ok String password = “changeme”; SSLContext context = SSLContext.getInstance(“SSL”); KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmfactory.init(keystore, password.toCharArray()); context.init(kmfactory.getKeyManagers(), new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException { } @Override public void checkServerTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException { […]

如何检查X509Certificate是否为CA证书?

我在Java中有一个X509Certificate实例,我需要确定它是CA证书还是用户证书。 有人可以提供任何帮助吗? 提前致谢!

将.cer证书转换为.jks

我需要将.cer文件转换为.jks文件。 我看到了一些关于它的问题,但没有看到我需要的解决方案。 我不需要它来将其添加到我的本地证书,但作为要上传到服务器的文件。 我还需要只做一次,而不是以编程方式。 有这个线程使用java将.cer转换为.jks并且作者说他已经成功完成了,但由于我没有足够的声誉,我无法评论他的上一个回复,我也不能向他发送个人信息并询问他。 所以,如果有人知道一个简单的方法,我会很高兴听到。

在64位计算机上访问硬件PKCS11令牌

所以这就是我想要做的。 我有一个硬件令牌,上面有一些证书,我正在编写一个Java应用程序来尝试访问这些证书。 我在jre6中使用了SunPKCS11库,用于Windows 32位机器。 这是我如何访问证书的一小部分示例: String configName = “pkcs.cnf” String PIN = “123456”; Provider p = new sun.security.pkcs11.SunPKCS11(configName); Security.addProvider(p); KeyStore keyStore = KeyStore.getInstance(“PKCS11”); char[] pin = PIN.toCharArray(); keyStore.load(null, pin); 它工作得很好,我能够获得证书和一切。 现在我想在64位机器上做同样的事情。 但是我试图使用64位jre6库并且缺少SunPKCS11 jar文件(located in {java.home}/lib/ext 。因此我无法创建SunPKCS11对象。我的问题是,你做了什么我现在做什么?如何使用64位java库访问令牌上的证书?是否有人为此类任务编写了64位包装器?

自签名证书:DNSName组件必须以字母开头

有没有办法让java的keytool在SAN中使用通配符生成自签名证书(主题备用名称)? 我正在使用此命令生成密钥库: keytool -genkey -alias tomcat -storetype JKS -keyalg RSA -keysize 2048 -ext san=dns:*.example.com -keystore “path/to/my/keystore.jks” -validity 3650 但我得到IOException: DNSName components must begin with a letter 显然,问题是SAN中的*.example.com ,但我没有看到为example.com子域生成自签名证书的其他方法。 据此,它应该是可能的。 这是我的语法错误,keytool中的错误,还是我误解了什么? 顺便说一句,我正在使用JDK 1.8 update 60中的keytool 编辑我设法通过指定CN=*.example.com ,并将SAN留空,通过keytool为所有example.com子域生成自签名证书。 尽管如此,我会将Omikron的答案视为已被接受(因为它是一个真正的答案,而不是绕过限制)。