`

KeyTool 工具生成X.509证书

阅读更多

KeyTool 工具生成X.509证书

 

学习系统过程中看到与其它系统交互用到证书认证,整理网上以及自己学习的一些规则制作出两个版本的证书生成方式 

 

主要原理是使用jdk提供的 keytool命令实现 

 

 

 

 

命令行

1.1 生成证书

keytool -genkey -alias tomcat -keyalg RSA -keystore e:/tomcat/https/mykey -storepass 111111 -keypass 111111

1.2 导出证书

keytool -export -alias tomcat -storepass 111111  -file  server.cer -keystore e:/tomcat/https/mykey

 

 

制作windows 批处理脚本如下:

 

01-GenRSA.cmd (生成证书)

 

@echo off
color 3A 
rem 显示工具信息
call 03-initInfo.cmd
rem 定义变量
set "cd=%~dp0"
set "keystoreFile=%cd%\file\demo.jks"
set "validity=30"
set "keysize=1024"
set "alias=test_cert"
set "keyalg=RSA"
set "storepass=storepass" rem 建议去掉此项改为手工录入
set "keypass=keypass"	rem 建议去掉此项改为手工录入
rem 对称加密算法genkey 非对称加密  genkeypair
rem set "gen=-genkeypair"
rem set "gen=-genkey"
rem dname "CN=JsHand,OU=jshand.com CLD,O=jshand.com,L=BJ,ST=BJ,C=CN"
set "dname="CN=JsHand,OU=jshand.com CLD,O=jshand.com,L=BJ,ST=BJ,C=CN""
rem  显示证书信息
call 04-showJksInfo.bat
echo.
echo.
echo.
keytool -genkeypair -validity %validity% -keysize %keysize% -alias %alias% -keyalg %keyalg% -keystore  %keystoreFile%  -storepass %storepass% -keypass %keypass% -v -dname %dname%
echo 按任意键退出程序
pause>nul
  

02-ExportRSA.cmd (导出证书)

 

@echo off
call 03-initInfo.cmd
rem 定义变量
set "cd=%~dp0"  rem 当前目录
set "filedir=%cd%\file"
set "keystoreFile=%filedir%\demo.jks"
set "alias=test_cert"
set "cerFile=%filedir%\demo.cer"
set "storepass=storepass" rem 建议去掉此项改为手工录入
rem 对称加密算法genkey 非对称加密  genkeypair
rem set "gen=-genkeypair"
rem set "gen=-genkey"
rem dname "CN=JsHand,OU=Sinosig CLD,O=Sinosig,L=BJ,ST=BJ,C=CN"
set "dname="CN=JsHand,OU=Sinosig CLD,O=Sinosig,L=BJ,ST=BJ,C=CN""
echo	 ********************************************
echo	 证书信息
echo	 ********************************************
echo	 keystoreFile 文件存储名为:%keystoreFile%
echo	 alias 别名为:%alias%
echo	 storepass 别名密码为:*********
echo 按任意键生成证书
pause>nul
cls
echo.
keytool   -export  -keystore  %keystoreFile%   -alias    %alias%    -file  %cerFile%    -storepass %storepass%  
echo 按任意键退出程序
pause>nul

 

03-initInfo.cmd (显示工具信息,无关紧要)

  

pause
@echo off
rem 设置颜色 纯属为了美观,非必须
color 3A 
echo	 *********************************************
echo	 关于本工具
echo	 *********************************************
echo	 欢迎使用 keytool 证书生成工具
echo	 http://www.jshand.com
echo	 本程序利用java keytool 命令
echo	 需要配置java环境变量,且jdk1.4+
echo 按任意键开始生成...
rem 暂停一下,不要显示不想要的 “请按任意键继续. . .”
pause>nul 
cls
  

04-showJksInfo.cmd (生成证书前显示证书信息 非必须)

 

echo	 ********************************************
echo	 证书信息
echo	 ********************************************
echo	 keystoreFile 文件存储名为:%keystoreFile%
echo	 validity 有效期为:%validity%
echo	 keysize 密钥为:%keysize%
echo	 alias 别名为:%alias%
echo	 keyalg 加密算法为:%keyalg%
echo	 storepass 别名密码为:*********
echo	 keypass 密钥库密码为:*******
echo	 dname 对象为:%dname%
echo 按任意键继续生成
pause>nul
cls

 

提供精简版  all.cmd 

@echo off
rem 生成证书
keytool -genkeypair -validity 30 -keysize 1024 -alias myalias -keyalg RSA -keystore  demo.jks  -storepass 123456 -keypass 654321 -v -dname "CN=JsHand,OU=jshand.com CLD,O=jshand,L=BJ,ST=BJ,C=CN"
echo.
rem 导出证书 部分参数 需要与上述参数一致
keytool   -export  -keystore   demo.jks   -alias    myalias    -file  demo.cer    -storepass 123456  
echo.
echo 任意键退出
pause>nul

 

2 使用java代码生成证书

 

 

2.1调用sun.security.tools.KeyTool类的main方法

 

public static void main(String[] args) throws Exception
    {

        // 所有变量都是写死的, 可以自己修改
        // 生成证书
        String doscmd = "-genkeypair -validity   30  -keysize    1024    "
                + " -alias  myalias -keyalg RSA -keystore  d:\\demo.jks  -storepass 123456 "
                + " -keypass 654321 -v -dname CN=JsHand,OU=jshand.com,O=jshand,L=BJ,ST=BJ,C=CN";
        String[] paramArrayOfString = doscmd.split("\\s+");
        sun.security.tools.KeyTool.main(paramArrayOfString);

        // 暂停1.5秒 否则没有生成证书 后会导致导出证书也失败
        Thread.sleep(1500);

        // 导出证书
        doscmd = "-export -keystore  d:\\demo.jks    -alias   myalias  -file  d:\\demo.cer    -storepass 123456 ";
        paramArrayOfString = doscmd.split("\\s+");
        sun.security.tools.KeyTool.main(paramArrayOfString);

    }
 

 

 

2.2调用keytool.exe

 

此处采用网上的实现,即java调用cmd命令后执行keytool,其中有个线程休眠操作,防止生成证书命令未执行完 随即执行导出证书命令,所有参数均写死,可以优化成变量传参的形式。代码如下

  

import java.io.InputStream;
/**
 * TODO(用一句话描述该文件的作用)
 * 
 * @title: CreateAndExportPKI.java
 * @author zhangjinshan-ghq
 * @date 2014-6-5 下午12:12:37
 */
/**
 * TODO(这里用一句话描述这个类的作用)
 * 
 * @className CreateAndExportPKI
 * @author zhangjinshan-ghq
 * @version V1.0 2014-6-5 下午12:12:37 TODO(如果是修改版本,描述修改内容)
 */
public class CreateAndExportPKI
{
    public static void execDos(String doscmd) throws InterruptedException
    {
        String[] cmd = new String[3];
        cmd[0] = "cmd.exe";
        cmd[1] = "/C";
        cmd[2] = doscmd;
        String executeComd = "cmd.exe " + " /C " + doscmd;
        try
        {
            System.out.println("cmd 命令如下-->" + cmd[2]);
            Runtime runtime = Runtime.getRuntime();
            Process processa = runtime.exec(executeComd);
            InputStream in = processa.getInputStream();
            Thread.sleep(1500);
            // 将cmd显示的内容输出到命令行
            while (in.available() > 0)
            {
                byte[] b = new byte[in.available()];
                in.read(b);
                System.out.println(new String(b, "iso8859-1"));
            }
            in.close();
        }
        catch (java.io.IOException e)
        {
            System.err.println("IOException " + e.getMessage());
        }
    }
    public static void main(String[] args) throws InterruptedException
    {
        // 所有变量都是写死的, 可以自己修改
        // 生成证书
        String doscmd = " keytool   -genkeypair -validity   30  -keysize    1024    "
                + " -alias  myalias -keyalg RSA -keystore  d:\\demo.jks  -storepass 123456 "
                + " -keypass 654321 -v -dname \"CN=JsHand,OU=jshand.com CLD,O=jshand,L=BJ,ST=BJ,C=CN\"";
        execDos(doscmd);
        // 暂停1.5秒 否则没有生成证书 后会导致导出证书也失败
        Thread.sleep(1500);
        // 导出证书
        doscmd = "keytool   -export -keystore  d:\\demo.jks    -alias   myalias  -file  d:\\demo.cer    -storepass 123456 ";
        execDos(doscmd);
    }
}

 

  

参考

3.1 keytool 具体参数如下(摘自网络,可以百度或者Google

 

 

-genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书 
-alias       产生别名 
-keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中 
-keyalg      指定密钥的算法  
-validity    指定创建的证书有效期多少天 
-keysize     指定密钥长度 
-storepass   指定密钥库的密码 
-keypass     指定别名条目的密码 
-dname       指定证书拥有者信息 例如:  "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn" 
-list        显示密钥库中的证书信息      keytool -list -v -keystore sage -storepass .... 
-v           显示密钥库中的证书详细信息 
-export      将别名指定的证书导出到文件  keytool -export -alias caroot -file caroot.crt 
-file        参数指定导出到文件的文件名 
-delete      删除密钥库中某条目          keytool -delete -alias sage -keystore sage 
-keypasswd   修改密钥库中指定条目口令    keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage 
-import      将已签名数字证书导入密钥库  keytool -import -alias sage -keystore sagely -file sagely.crt 
             导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。 

 

  

3.2 命令行中keytool的所有参数

keytool 用法:
-certreq     [-v] [-protected]
             [-alias <别名>] [-sigalg <sigalg>]
             [-file <csr_file>] [-keypass <密钥库口令>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-changealias [-v] [-protected] -alias <别名> -destalias <目标别名>
             [-keypass <密钥库口令>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-delete      [-v] [-protected] -alias <别名>
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-exportcert  [-v] [-rfc] [-protected]
             [-alias <别名>] [-file <认证文件>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-genkeypair  [-v] [-protected]
             [-alias <别名>]
             [-keyalg <keyalg>] [-keysize <密钥大小>]
             [-sigalg <sigalg>] [-dname <dname>]
             [-validity <valDays>] [-keypass <密钥库口令>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-genseckey   [-v] [-protected]
             [-alias <别名>] [-keypass <密钥库口令>]
             [-keyalg <keyalg>] [-keysize <密钥大小>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-help
-importcert  [-v] [-noprompt] [-trustcacerts] [-protected]
             [-alias <别名>]
             [-file <认证文件>] [-keypass <密钥库口令>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-importkeystore [-v]
             [-srckeystore <源密钥库>] [-destkeystore <目标密钥库>]
             [-srcstoretype <源存储类型>] [-deststoretype <目标存储类型>]
             [-srcstorepass <源存储库口令>] [-deststorepass <目标存储库口令>]
             [-srcprotected] [-destprotected]
             [-srcprovidername <源提供方名称>]
             [-destprovidername <目标提供方名称>]
             [-srcalias <源别名> [-destalias <目标别名>]
               [-srckeypass <源密钥库口令>] [-destkeypass <目标密钥库口令>]]
             [-noprompt]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-keypasswd   [-v] [-alias <别名>]
             [-keypass <旧密钥库口令>] [-new <新密钥库口令>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-list        [-v | -rfc] [-protected]
             [-alias <别名>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...
             [-providerpath <路径列表>]
-printcert   [-v] [-file <认证文件>]
-storepasswd [-v] [-new <新存储库口令>]
             [-keystore <密钥库>] [-storepass <存储库口令>]
             [-storetype <存储类型>] [-providername <名称>]
             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

 

 

 

 

3.4 bat 获取当期路径

http://blog.csdn.net/guomao545/article/details/6417667

3.5 java命令keytool 中的参数

http://woainishijin456.blog.163.com/blog/static/9893862620124153220890/

 

 

 

分享到:
评论

相关推荐

    个性化的E-MAIL软件 Icredimail2001b

    个性化的E-MAIL软件 Icredimail2001b 充满个性化E-MAIL软件,可以选择信纸动画和声音及签名

    《基于YOLOv8的蹦床馆识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    MOCD207M 产品规格书

    MOCD207M 丝印D207 SOP8 1.25V 150mA晶体管输出光耦

    2024年迎接上市公司重组并购浪潮推动出版行业企业数字化转型报告.pdf

    2024年迎接上市公司重组并购浪潮推动出版行业企业数字化转型报告

    基于Andorid的闹钟功能设计.zip

    基于Andorid的闹钟功能设计实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。

    电商_微信小程序_学习项目_电商功能演示_1742849441.zip

    电商_微信小程序_学习项目_电商功能演示_1742849441.zip

    《基于YOLOv8的网球发球分析系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    React_应用开发_github-notetaker_实战_1742847797.zip

    app开发

    《基于YOLOv8的隧道安全监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    5小时零基础入门小程序云开发-2.7G课程网盘链接提取码下载.txt

    本套课程带领大家零基础入门小程序云开发。摆脱后台自己实现小程序后台,学会音视频小程序的开发,学会小程序图片的上传与管理,学习人工智能识别图片,用小程序模仿微信朋友圈,实现一个云相册。

    移动开发_Android_MVC_调试工具框架BeeFram_1742846880.zip

    移动开发_Android_MVC_调试工具框架BeeFram_1742846880.zip

    vue3-element-admin基础框架带权限参考文档:https://vue3-element-admin-site.midfar.com

    vue3-element-admin基础框架带权限 参考文档:https://vue3-element-admin-site.midfar.com

    《基于YOLOv8的儿童行为监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    Python网页文本爬虫:基于小说网站的基础爬虫实现与解析

    内容概要:本文介绍了Python网页文本爬虫的基本概念及其应用,特别是针对小说网站的爬虫实现。文中详细讲解了爬虫的工作原理和技术要点,如urllib库的使用、字符串操作以及正则表达式的初步应用。此外,还提供了完整的爬虫代码示例,涵盖从HTML页面下载到数据提取和处理的全过程。通过对小说网站的具体案例分析,展示了如何利用Python编写简单的爬虫程序来抓取并保存所需信息。 适合人群:对Python编程有一定基础的学习者,尤其是希望了解和掌握网页爬虫技术的初学者。 使用场景及目标:适用于想要快速入门Python爬虫技术的人群,帮助他们理解爬虫的基本原理和实现方法,为后续深入学习打下坚实基础。具体应用场景包括但不限于自动化数据收集、信息检索系统构建等。 其他说明:虽然本文主要关注于基础爬虫的实现,但同时也提到了一些进阶的技术方向,如HTTP长连接和多线程的应用,供有兴趣进一步探索的读者参考。

    jiguang.zip

    jiguang.zip

    weifuchenggg_JKBD_1742849495.zip

    weifuchenggg_JKBD_1742849495.zip

    移动开发_iOS_Safari快捷方式_应用内功能演示_1742853882.zip

    app开发

    移动开发_iOS_Scriptable_TSX_自动化脚本库_1742849101.zip

    app开发

    《基于YOLOv8的赛车运动分析系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

Global site tag (gtag.js) - Google Analytics