java通过command调用openssl生成私钥和证书

Posted 护花使者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java通过command调用openssl生成私钥和证书相关的知识,希望对你有一定的参考价值。

在windows环境下进行的测试,前提条件,windows上需要先安装openssl。

配置环境变量,查看版本:

 

 

import java.io.*;
import java.util.Properties;

public class OpensslCommand {
    private static void runCMD(String[] CMD) {
        java.lang.Process process = null;
        try {
            process = Runtime.getRuntime().exec(CMD);
            ByteArrayOutputStream resultOutStream = new ByteArrayOutputStream();
            InputStream errorInStream = new BufferedInputStream(process.getErrorStream());
            InputStream processInStream = new BufferedInputStream(process.getInputStream());
            int num = 0;
            byte[] bs = new byte[1024];
            while ((num = errorInStream.read(bs)) != -1) {
                resultOutStream.write(bs, 0, num);
            }
            while ((num = processInStream.read(bs)) != -1) {
                resultOutStream.write(bs, 0, num);
            }
            String result = new String(resultOutStream.toByteArray(), "gbk");
            System.out.println(result);
            errorInStream.close();
            processInStream.close();
            resultOutStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (process != null) process.destroy();
        }
    }
    public static void main(String[] args) throws Exception {
        //需要指定openssl.exe路径
        //java生成私钥
        String[] cmdPrivateKey = {"cmd", "/C", "C:\\\\soft\\\\OpenSSL-Win64\\\\bin\\\\openssl.exe genrsa -out ca.key 2048"};
        //java生成证书请求
        String[] cmdCertificationReq = {"cmd", "/C", "C:\\\\soft\\\\OpenSSL-Win64\\\\bin\\\\openssl.exe req -new -key ca.key -out ca.csr -subj /C=CN"};
        //java生成证书
        String[] cmdCertification = {"cmd", "/C", "C:\\\\soft\\\\OpenSSL-Win64\\\\bin\\\\openssl.exe x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt"};
        runCMD(cmdPrivateKey);
        runCMD(cmdCertificationReq);
        runCMD(cmdCertification);
        Properties props=System.getProperties(); //系统属性
        System.out.println("用户的当前工作目录:"+props.getProperty("user.dir"));
    }
}

 

对应目录下可以生成:

 

 

其中,ca.crt是自签名证书文件。ca.key是私钥。ca.csr只是生成证书的中间请求,是用来指定一些信息,这边只指定国家为CN。

以上是关于java通过command调用openssl生成私钥和证书的主要内容,如果未能解决你的问题,请参考以下文章

java RSA实现私钥签名公钥验签私钥加密数据公钥解密数据

Java中使用OpenSSL生成的RSA公私钥进行数据加解密

Java Keytools 证书转换成Openssl 的PEM 文件或keytools 导出私钥文件

用openssl生成的ssl证书和付费的有啥区别

无法使用 openssl 加密私钥

PHP Openssl 生成公钥私钥