Tag: keystore

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

我需要将一个可信证书导入到一个已经存在的密钥库中,这是我的代码,但它给我一个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”); 有人能给我一个线索吗?

Maven错误:(重复)java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空

不得不再问一次。 有人认为这是一个重复的问题 ,已经回答并从列表中删除。 我正在使用maven(mvn)批处理命令与windows(不是m2e与eclipse)运行干净安装或解决依赖关系。 有时,当更改pom.xml时,有必要从我们的nexus服务器下载工件。 这对我来说已经很久了。 但是现在连接到nexus服务器(https,服务器使用公司拥有的证书)失败了“ java.security.InvalidAlgorithmParameterException:trustAnchors参数必须是非空的 ”我知道,我更改了Java版本。 但我很确定我维护cacerts密钥库的方式与之前版本相同。 (在租用时我比较了两个cacerts中的指纹;它们是相同的)。 运行命令“ mvn -s -Djavax.net.debug = all -Djava.net.ssl.trustStore =”C:/Programme/Java/jre1.8.0_102/lib/security/cacerts“-Djavax.net.ssl .trustStorePassword = changeit dependency:resolve “,ssl-trace说: keyStore is : keyStore type is : jks keyStore provider is : init keystore init keymanager of type SunX509 trustStore is: No File Available, using empty keystore. trustStore type is : […]

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 = […]

生成BKS密钥库并存储应用密钥

我应该创建一个BKS密钥库并存储一个私有Application密钥,该密钥是一个48字符长的字符串。 我还有一个JCEKS密钥库,其中已包含此密钥值。 如果我尝试使用portecle工具转换为BKS类型密钥库,则Key条目将丢失。 我是JCE的新手。 有人可以指导我在Keystore中导入此密钥需要做些什么吗? 谢谢。

Java – javax.net.ssl.SSLPeerUnverifiedException:peer未经过身份validation

我正在尝试使用自己的SSL客户端连接到我自己的SSL服务器,但是我收到以下错误: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at sun.security.ssl.SSLSessionImpl.getPeerCertificateChain(SSLSessionImpl.java:420) at server.run(Server.java:70) at server.main(Server.java:22) 我在stackoverflow上搜索了同样的问题,但我只能找到在Apache或其他HTTPS“系统”中使用它的人。 这是我的服务器代码: /* Server SSL */ import javax.net.ssl.*; import java.io.*; import java.net.InetAddress; import java.security.KeyStore; //import java.security.cert.X509Certificate; import java.util.Date; import javax.security.cert.X509Certificate; class server { ObjectOutputStream out; ObjectInputStream in; public static void main(String[] args) { new server().run(); } void run() { Date date = new Date(); […]

在一个SSL套接字连接中使用两个私钥(密钥库)和两个公钥(信任库)

我需要在一个套接字ssl连接中使用密钥对而不会在客户端中进行任何更改。 为什么? 因为一个客户端在信任存储中使用CN属性进行连接握手,而在同一属性中使用另一个值以同一方式处理相同任务的其他客户端。 所以我需要使用具有不同CN属性的 两个密钥存储 (私有)以及别名并共享 具有不同CN属性的 两个不同信任存储 (公钥)以及别名。 描述如下: keyStore1 密钥库类型:JKS 密钥库提供商:SUN 别名: identity1 所有者: CN = app1 … 发行人:CN = app1 …… trustStore1 别名: identity1 所有者: CN = app1 … 发行人:CN = app1 …… keyStore2 别名: identity2 所有者:CN = app2 … 发行人:CN = app2 …… trustStore2 别名: identity2 所有者: CN = app2 … […]

如何从PEM证书和密钥构建SSLSocketFactory而不转换为密钥库?

我获得了一个自签名客户端证书工具包,用于通过HTTPS访问服务器。 该套件包含以下PEM文件: client.crt(客户端证书) client.key(客户端私钥) ca.crt(CA证书) 解决该任务的一种方法是生成Java密钥库: 使用openssl将客户端证书和密钥转换为PKCS12密钥库 使用keytool将CA证书导入到商店 …然后使用以下代码构建SSLSocketFactory实例: InputStream stream = new ByteArrayInputStream(pksData); KeyStore keyStore = KeyStore.getInstance(“PKCS12”); keyStore.load(stream, password); KeyManagerFactory kmf = KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, password.toCharArray()); KeyManager[] keyManagers = kmf.getKeyManagers(); TrustManagerFactory tmfactory = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); tmfactory.init(keyStore); TrustManager[] trustManagers = tmfactory.getTrustManagers(); SSLContext sslContext = SSLContext.getInstance(“TLS”); sslContext.init(keyManagers, trustManagers, null); sslSocketFactory = sslContext.getSocketFactory(); …后来用于初始化http库。 因此,我们获得了一个KeyStore,然后在它的帮助下初始化KeyManagers和TrustManagers,最后我们用它们构建了SSLSocketFactory实例。 问题是 :有没有办法避免密钥库文件的创建,并以某种方式构建SSLSocketFactory,从PublicKey和Certificate实例开始(例如,可以使用bouncycastle的PemReader从PEM文件中获取)?

您是否需要密码才能访问信任库(使用java keytool)?

我刚刚使用java keytool创建了一个信任库(用于没有CA证书的服务器的服务器身份validation)。 但是我只是注意到一些奇怪的事 我这样开始我的客户: java -Djavax.net.ssl.trustStore=/client.keystore -classpath Client (注意:没有指定密码) 以上呼叫有效。 但是,当我尝试这个: java -classpath Client 这是行不通的。 (显然它不起作用,它需要信任库)。 我本来希望传递这个选项(但我没有): -Djavax.net.ssl.trustStorePassword=mypass 问题 :您是否需要密码才能访问信任库? 密码只是用于修改吗? 密钥库怎么样?

Java 7(充当客户端)使用在Java 6中工作的密钥库和信任库的SSL握手失败

我正在进行JBoss AS 5.1到7.4以及Java 6到7的迁移,并且获得握手失败。 密钥库和信任库是我们在Java 6中成功使用的密钥库和信任库。 我已经写了一些测试来缩小问题范围,它绝对不是JBoss,而是Java 7。 启用S​​SL日志记录后,我明白了: 17:44:30,041 INFO [stdout] (http-/192.168.147.20:8080-120) %% Invalidated: [Session-2, SSL_RSA_WITH_RC4_128_SHA] 17:44:30,041 INFO [stdout] (http-/192.168.147.20:8080-120) http-/192.168.147.20:8080-120, SEND TLSv1 ALERT: fatal, description = certificate_unknown 17:44:30,041 INFO [stdout] (http-/192.168.147.20:8080-120) http-/192.168.147.20:8080-120, WRITE: TLSv1 Alert, length = 2 17:44:30,041 INFO [stdout] (http-/192.168.147.20:8080-120) http-/192.168.147.20:8080-120, called closeSocket() 17:44:30,041 INFO [stdout] (http-/192.168.147.20:8080-120) http-/192.168.147.20:8080-120, handling exception: javax.net.ssl.SSLHandshakeException: […]