Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式将自签名证书添加到密钥库/信任库_Java_Ssl_Keystore - Fatal编程技术网

Java 以编程方式将自签名证书添加到密钥库/信任库

Java 以编程方式将自签名证书添加到密钥库/信任库,java,ssl,keystore,Java,Ssl,Keystore,我看到(和其他人)解释了如何使用命令行手动将(自签名)证书添加到keystore/cacerts。执行此操作时,如果您获得了证书(.cert文件),则可以在没有签名证书的情况下设置与服务器的安全连接。这对于测试目的非常有用 我想编程,所以用户不需要手动操作。基本概念如下:用户拥有.cert文件的本地副本,并为我的程序提供该文件在其文件系统中驻留的路径。我的程序获取文件并将其添加到密钥库 我的问题是:如何将此证书添加到我的程序中的密钥库中,以便turstmanager根据.cert文件的(路径)将

我看到(和其他人)解释了如何使用命令行手动将(自签名)证书添加到keystore/cacerts。执行此操作时,如果您获得了证书(.cert文件),则可以在没有签名证书的情况下设置与服务器的安全连接。这对于测试目的非常有用

我想编程,所以用户不需要手动操作。基本概念如下:用户拥有.cert文件的本地副本,并为我的程序提供该文件在其文件系统中驻留的路径。我的程序获取文件并将其添加到密钥库

我的问题是:如何将此证书添加到我的程序中的密钥库中,以便turstmanager根据.cert文件的(路径)将其作为可信/签名的证书接受?有关于这个问题的教程或代码片段吗

PS:我不需要“接受所有证书”trustmanager技巧(如所述)

非常简单:

InputStream input = ...;
CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) factory.generateCertificate(input);
KeyStore keystore = ...;
keystore.setCertificateEntry(alias, cert);

从javadoc中可以明显看出加载和存储密钥库:

感谢您为我指明了正确的方向!keystore.setCertificate是否会尝试临时(仅当此程序运行时)和本地(仅针对此应用程序)添加证书,或者这会将给定的证书添加到我的证书中,从而永远被接受?这完全取决于将其添加到哪个密钥库。如果将其添加到默认的cacerts密钥库,则为“是”。如果将其添加到另一个密钥库,则仅当您使用该密钥库时,它才会处于活动状态。如果我使用keystore.getInstance(keystore.getDefaultType()),我是获取链接到cacerts的密钥库,还是获取一个全新的空密钥库,而不包含证书?或者其他什么?@user1884155,要保存密钥库,请使用
keystore.store
(如本答案链接的JavaDoc简介中所述)。正在获取默认的信任库。是否可以将密钥库类用于信任库?密钥存储和信任存储在概念上有区别。有一个名为
InstallCert
的Sun GUI程序,您应该能够找到它。我想我是在这里或者Oracle Java论坛上发布的,很抱歉,我现在无法提供链接。