Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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_Openssl_Keystore_Private Key_Public Key - Fatal编程技术网

Java 分别使用私钥和公钥

Java 分别使用私钥和公钥,java,openssl,keystore,private-key,public-key,Java,Openssl,Keystore,Private Key,Public Key,οκ!我想在java中建立与SSL/TLS的客户机-服务器通信。服务器是多线程的。使用openssl,我充当自己的CA(为权威机构创建私钥和自签名证书)。现在我想为我的服务器和客户端创建密钥和证书,这些密钥和证书是从我创建的CA签名的 1) 我是否必须从提示符为每个客户端创建证书和密钥?或者它是另一种“自动化”的方式(如使用脚本) 2) 我已经看到了用于设置密钥库的代码 private void setupClientKeyStore() throws GeneralSecurityExcept

οκ!我想在java中建立与SSL/TLS的客户机-服务器通信。服务器是多线程的。使用openssl,我充当自己的CA(为权威机构创建私钥和自签名证书)。现在我想为我的服务器和客户端创建密钥和证书,这些密钥和证书是从我创建的CA签名的

1) 我是否必须从提示符为每个客户端创建证书和密钥?或者它是另一种“自动化”的方式(如使用脚本)

2) 我已经看到了用于设置密钥库的代码

private void setupClientKeyStore() throws GeneralSecurityException, IOException { clientKeyStore = KeyStore.getInstance( "JKS" ); clientKeyStore.load( new FileInputStream( "client1publickey.jks" ), "password".toCharArray() ); } private void setupServerKeystore() throws GeneralSecurityException, IOException { InputStream keyStoreResource = new FileInputStream("serverprivatekey.jks"); char[] keyStorePassphrase = "password".toCharArray(); serverKeyStore = KeyStore.getInstance("JKS"); serverKeyStore.load(keyStoreResource, keyStorePassphrase); } private void setupClientKeyStore()引发GeneralSecurityException,IOException { clientKeyStore=KeyStore.getInstance(“JKS”); load(新文件输入流(“client1publickey.jks”), “password.toCharArray()); } private void setupServerKeystore()引发GeneralSecurityException,IOException { InputStream keyStoreResource=新文件InputStream(“serverprivatekey.jks”); char[]keystrepassphrase=“password”.toCharArray(); serverKeyStore=KeyStore.getInstance(“JKS”); 加载(keyStoreResource、keystorePassphase); } 我已经运行了命令来查看这些条目的类型,client1publickey是一个TrustedCert条目,而serverprivatekey是一个PrivateKey条目。这段代码在我的服务器类上。我的客户机类私有void setupServerKeystore()中有以下代码抛出GeneralSecurityException,IOException{ private void setupServerKeystore() throws GeneralSecurityException, IOException { serverKeyStore = KeyStore.getInstance( "JKS" ); serverKeyStore.load( new FileInputStream("serverpublickwy.jks"), "university".toCharArray() ); } private void setupClientKeyStore() throws GeneralSecurityException, IOException { clientKeyStore = KeyStore.getInstance( "JKS" ); clientKeyStore.load( new FileInputStream( "client1privatekey.jks" ), "university".toCharArray() );} serverKeyStore=KeyStore.getInstance(“JKS”); 加载(新文件输入流(“serverpublickwy.jks”), “大学”; } private void setupClientKeyStore()引发GeneralSecurityException,IOException{ clientKeyStore=KeyStore.getInstance(“JKS”); load(新文件输入流(“client1privatekey.jks”), “大学” 问题是如何分别创建这些jks文件?publickey.jks文件是cert,对吗?如何从私钥将其保存在另一个文件中并从CA签名?或者这是我在客户机/服务器之间建立连接的另一种方式?
首先,我用openssl创建了CA,然后服务器和客户端的两个jks文件包括证书和密钥。抱歉用英语回答。

首先,您需要/想要客户端身份验证,即客户端证书吗?SSL/TLS本身不需要它;使用SSL/TLS的协议可能会失效。第二,CA的主要好处是,reliers(当然是客户端,如果使用客户端身份验证,则服务器)不需要配置其对等方的证书,只需配置CA的一个根证书。具有CA根证书的信任库不必是单独的JKS文件;Java可以在一个JKS中处理trustedCert条目和privateKey条目。。。。。。但是,每个服务器和每个客户端(如果客户端进行身份验证)都需要一个私钥,并且在其密钥库中需要该私钥的证书。您可以在Java(JKS)中生成密钥和CSR,使用openssl从CSR发出证书,并将证书导入回JKS;或者您可以在openssl中生成密钥、CSR和证书,并将其作为PKCS#12“导出”到Java。如果您还有问题,请更具体一些。首先,您是否需要/想要客户端身份验证,即客户端证书?SSL/TLS本身不需要它;使用SSL/TLS的协议可能会失效。第二,CA的主要好处是,reliers(当然是客户端,如果使用客户端身份验证,则服务器)不需要配置其对等方的证书,只需配置CA的一个根证书。具有CA根证书的信任库不必是单独的JKS文件;Java可以在一个JKS中处理trustedCert条目和privateKey条目。。。。。。但是,每个服务器和每个客户端(如果客户端进行身份验证)都需要一个私钥,并且在其密钥库中需要该私钥的证书。您可以在Java(JKS)中生成密钥和CSR,使用openssl从CSR发出证书,并将证书导入回JKS;或者您可以在openssl中生成密钥、CSR和证书,并将其作为PKCS#12“导出”到Java。如果你还有问题,请说得更具体些。