Java如何基于command调用openssl生成私钥证书
作者:护花使者 发布时间:2023-08-09 11:55:39
标签: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。
来源:https://www.cnblogs.com/chenmz1995/p/13401450.html


猜你喜欢
- 本文实例讲述了java图片滑动验证(登录验证)原理与实现方法。分享给大家供大家参考,具体如下:这是我简单做出的效果图,处理300X150px
- C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。public class C
- 设置项这个版本已经取消了defalut settings指定成默认配置的选项,所以配置都是在settings中配置设置项设置统一UTF-8编
- 一. 安装依赖包yum install -y wgetyum install -y gcc-c++yum install -y zlib-d
- 在java中的整数类型有四种,分别是 byte short int long 其中byte只有一个字节 0或1,在此不详细讲解。
- boolean isGBK(String s) throws UnsupportedEncodingException { if(s.equ
- 1. eclipse的git插件安装与配置1.1 git插件安装新版本的eclipse已经自带了GIt了,就不用安装了。老版本的eclips
- 如何高效地进行数组复制?如果把一个变量值复制给另外一个数组变量,那么2个变量指向托管堆上同一个引用。如果想在托管堆上创建另外的一份数组实例,
- 什么是栈和队列栈如果用数组模拟的话是类似于一个U形桶状堆栈空间,地下是封口的,只能从顶部一个地方进出,它的进出都是有顺序的,看下图:如果是进
- 本文实例为大家分享了C#实现订单管理程序的具体代码,供大家参考,具体内容如下订单管理的控制台程序,能够实现添加订单、删除订单、修改订单、查询
- 本文对原文:android实现计步功能初探,计步项目进行了精简,移除了进程服务和计时、守护进程、数据库保存等等,方便扩展功能。本文源码:ht
- Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中。然而 XML 配置文件需要通过 D
- 本文实例为大家分享了Winform实现石头剪刀布游戏的具体代码,供大家参考,具体内容如下新建一个windows窗体程序,用数字1代表石头,用
- (一) collection和collections这两者均位于java.util包下,不同的是:collection是一个集合接口,有Li
- 在java 中需要设置三个环境变量(1.5之后不用再设置classpath了,但个人强烈建议继续设置以保证向下兼用问题)JDK安装完成之后我
- 1、Hello, KotlinBugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验
- 本文实例为大家分享了PropertyDescriptor反射调用set和get方法,供大家参考,具体内容如下第一段:package com.
- 本文实例为大家分享了Java模拟实现斗地主发牌的具体代码,供大家参考,具体内容如下题目:模拟斗地主的发牌实现,54张牌,每张牌不同的花色(红
- 本文较为详细的描述了重载运算符的方法。一般来说,重载运算符在实际的项目开发中会经常的用到,但如果某些自定义类型通过简短几行代码重载一些常用的
- 1. InputStream -> byte[]引入 apache.commons.is 包import org.apache.com