一、Java代码生成cer证书文件:
public class GetCertFile {

//证书颁发者
    static String CertificateIssuer = "C=中国,ST=广东,L=广州,O=人民组织,OU=人民单位,CN=人民颁发";
    //证书使用者
    static String CertificateUser = "C=中国,ST=广东,L=广州,O=人民组织,OU=人民单位,CN=";
    
    public static void main(String[] args) {
        try {
            X509Certificate cert = getCert();
            System.out.println(cert.toString());

} catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*
    * CN(Common Name名字与姓氏)
    * OU(Organization Unit组织单位名称)
    * O(Organization组织名称)
    * ST(State州或省份名称)
    * C(Country国家名称)
    * L(Locality城市或区域名称)
    * */
    public static X509Certificate getCert() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        X509V3CertificateGenerator x509V3CertificateGenerator = new X509V3CertificateGenerator();
        //设置证书序列号
        x509V3CertificateGenerator.setSerialNumber(BigInteger.TEN);
        //设置证书颁发者
        x509V3CertificateGenerator.setIssuerDN(new X500Principal(CertificateIssuer));
        //设置证书使用者
        x509V3CertificateGenerator.setSubjectDN(new X500Principal(CertificateUser + "sun"));
        //设置证书有效期
        x509V3CertificateGenerator.setNotAfter(new Date(System.currentTimeMillis() + 1000 * 365 * 24 * 3600));
        x509V3CertificateGenerator.setNotBefore(new Date(System.currentTimeMillis()));
        //设置证书签名算法
        x509V3CertificateGenerator.setSignatureAlgorithm("SHA1withRSA");

x509V3CertificateGenerator.setPublicKey(publicKey);

//临时bc方法添加都环境变量
        Security.addProvider(new BouncyCastleProvider());
        X509Certificate x509Certificate = x509V3CertificateGenerator.generateX509Certificate(keyPair.getPrivate(), "BC");
        //写入文件
        FileOutputStream fos = new FileOutputStream("F:\\cer.cer");
        fos.write(x509Certificate.getEncoded());
        fos.flush();
        fos.close();
        return x509Certificate;
    }
}

二、Java代码生成jks文件和cer证书文件,以及jks文件和cer文件的读取:
public class GetJksAndCerFile {

public static void main(String[] args) {
        buildKeyAndSaveToJksFile();
        exportCerFile();
        try {
            readJks();
            readCer();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public static void executeCommand(String[] arstringCommand) {
        try {
            Runtime.getRuntime().exec(arstringCommand);

} catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

//生成密钥并保存到jks文件
    public static void buildKeyAndSaveToJksFile() {
        String[] command = new String[]{

"cmd ",
                "/k",
                "start", // cmd Shell命令

"keytool",
                "-genkeypair", //表示生成密钥
                "-alias", //要处理的条目的别名(jks文件别名)
                "sun",
                "-keyalg", //密钥算法名称(如 RSA DSA(默认是DSA))
                "RSA",
                "-keysize",//密钥位大小(长度)
                "1024",
                "-sigalg", //签名算法名称
                "SHA1withRSA",
                "-dname",// 唯一判别名,CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称),
                // ST=(州或省份名称), C=(单位的两字母国家代码)"
                "CN=(张三), OU=(人民单位), O=(人民组织), L=(广州), ST=(广东), C=(中国)",
                "-validity", // 有效天数
                "36500",
                "-keypass",// 密钥口令(私钥的密码)
                "123456",
                "-keystore", //密钥库名称(jks文件路径)
                "f:/demo.jks",
                "-storepass", // 密钥库口令(jks文件的密码)
                "123456",
                "-v"// 详细输出(秘钥库中证书的详细信息)
        };
        executeCommand(command);
    }

//从jks文件中导出证书文件
    public static void exportCerFile() {
        String[] command = new String[]{
                "cmd ", "/k",
                "start", // cmd Shell命令

"keytool",
                "-exportcert", // - export指定为导出操作
                "-alias", // -alias指定别名,这里是ss
                "sun",
                "-keystore", // -keystore指定keystore文件,这里是d:/demo.keystore
                "f:/demo.jks",
                "-rfc",
                "-file",//-file指向导出路径
                "f:/demo.cer",
                "-storepass",// 指定密钥库的密码
                "123456"
        };
        executeCommand(command);

}

//读取jks文件获取公、私钥
    public static void readJks() throws Exception {
        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
        keyStore.load(new FileInputStream("f:\\demo.jks"), "123456".toCharArray());
        Enumeration<String> aliases = keyStore.aliases();
        String alias = null;
        while (aliases.hasMoreElements()) {
            alias = aliases.nextElement();
        }
        System.out.println("jks文件别名是:" + alias);
        PrivateKey key = (PrivateKey) keyStore.getKey(alias, "123456".toCharArray());
        System.out.println("jks文件中的私钥是:" + new String(Base64.encode(key.getEncoded())));
        Certificate certificate = keyStore.getCertificate(alias);
        PublicKey publicKey = certificate.getPublicKey();
        System.out.println("jks文件中的公钥:" + new String(Base64.encode(publicKey.getEncoded())));
    }

//读取证书文件获取公钥
    public static void readCer() throws Exception {
        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        Certificate certificate =
                certificateFactory.generateCertificate(new FileInputStream("f:\\demo.cer"));
        PublicKey publicKey = certificate.getPublicKey();
        System.out.println("证书中的公钥:" + new String(Base64.encode(publicKey.getEncoded())));
    }
}

需导入的jar包:
<dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk16</artifactId>
            <version>1.46</version>
        </dependency>

三、使用keytool命令生成jks文件和cer证书文件:
   先进入jdk的bin目录,然后执行keytool命令。
1、生成jks文件命令:keytool -genkey -validity 36500 -keysize 1024 -alias sun -sigalg SHA1withRSA -keyalg RSA -keystore f:/demo.jks -dname CN=(SS)OU=(SS)O=(SS)L=(BJ)ST=(BJ)C=(CN) -storepass 123456 -keypass 123456 -v
2、生成cer证书文件命令:keytool -exportcert -alias sun -keystore f:/demo.jks -rfc -file f:/demo.cer -storepass 123456

3、生成jks文件的keytool命令参数:
-alias <alias>                  要处理的条目的别名
-keyalg <keyalg>                密钥算法名称
-keysize <keysize>              密钥位大小
-sigalg <sigalg>                签名算法名称
-destalias <destalias>          目标别名
-dname <dname>                  唯一判别名
-startdate <startdate>          证书有效期开始日期/时间
-ext <value>                    X.509 扩展
-validity <valDays>             有效天数
-keypass <arg>                  密钥口令
-keystore <keystore>            密钥库名称
-storepass <arg>                密钥库口令
-storetype <storetype>          密钥库类型
-providername <providername>    提供方名称
-providerclass <providerclass>  提供方类名
-providerarg <arg>              提供方参数
-providerpath <pathlist>        提供方类路径
-v                              详细输出
-protected                      通过受保护的机制的口令

4、生成cer证书文件keytool命令参数:
-certreq            生成证书请求
-changealias        更改条目的别名
-delete             删除条目
-exportcert         导出证书
-genkeypair         生成密钥对
-genseckey          生成密钥
-gencert            根据证书请求生成证书
-importcert         导入证书或证书链
-importpass         导入口令
-importkeystore     从其他密钥库导入一个或所有条目
-keypasswd          更改条目的密钥口令
-list               列出密钥库中的条目
-printcert          打印证书内容
-printcertreq       打印证书请求的内容
-printcrl           打印 CRL 文件的内容
-storepasswd        更改密钥库的存储口令

java中RSA数字证书生成,jks文件生成以及读取。相关推荐

  1. 签名算法sha256withrsa,RSA数字证书公钥私钥生成,base64转码和文件日志

    RSA数字证书公钥密钥生成: 在Linux系统下运行以下命令生成: 如果提示输出密码,可以为空,直接回车 生成的公钥rsa_public_key.pem和密钥rsa_private_key.pem文件 ...

  2. Java安全之数字证书

       在前面说到.消息摘要用于验证数据完整性,对称与非对称加密用于保证数据保密性,数据签名用于数据的抗否认性,于是集这些安全手段于一身的终极武器--数字证书出现了.数字证书具备了加密/解密的必要信息. ...

  3. Android Studio生成.jks文件

    jks(java keystore) 字面意思可以理解为java的密钥库,是一个用来存放密钥和证书的仓库.而keytool就是密钥和证书的管理工具,它把key(密钥)和certificate(证书)存 ...

  4. SSL用pem和key文件生成jks文件

    转自:https://blog.csdn.net/long19901216/article/details/79696796 在工作中时长会遇到配置https,我使用的是Tomcat服务器,tomca ...

  5. 使用Java代码生成RSA公私钥的.pem文件

    大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎大家留言讨论,你们的行动将是我无限的动力. 本篇主题是 ...

  6. 证书(3)如何在程序中使用数字证书

    一.在 .NET 程序中使用证书 请参见 <(2)强名称程序集与数字证书> 二.在 web 程序中使用证书 1.         SSL (Secure Sockets Layer) 协议 ...

  7. ant java 返回,在Java中直接操作ant回测试和生成测试报告

    在Java中直接操作ant来测试和生成测试报告 Ant是大家熟悉的构建工具,一般情况下,大家都是使用build.xml文件来配置使用Ant,这样的Ant已经是十分强大的.但有些怪异的场景需求特殊,你可 ...

  8. 转: 如何从keystore file中查看数字证书信息

    转: http://www.shuziqianming.com/201302/certificate-information-in-a-keystore-file/ 如何从keystore file中 ...

  9. java curl get_如何从Java中的curl get请求获取文件?

    我正在尝试使用API​​下载一些XBRL文件.为了做到这一点,我需要做一个卷曲的请求,就像这样:如何从Java中的curl get请求获取文件? curl -XGET http://distribut ...

最新文章

  1. PHP的cookie与session的使用
  2. PHP date函数参数详解
  3. mysql触发器删除同步_MySQL 触发器例子(两张表同步增加和删除)
  4. python with循环_Python for循环、while循环
  5. 七、内存、寄存器数据的传送
  6. PHP读取大文件的几种方法
  7. java做文件显示器_JavaWeb显示器
  8. java 9999 符号_按格式生成序号,如0001,0002...9999
  9. 深度解析 | 用 AI 帮助听障人群,一共需要几步?
  10. vagrant 学习
  11. TP5开源微信小程序商城源码+附安装文档
  12. HTTP权威指南(浓缩版)
  13. DPDK Release 21.05
  14. 13个常用的Word快捷键,一看就会,你值得拥有!
  15. 基于大数据的一线城市住房租赁影响因素分析
  16. 2021李彦宏致股东信全文
  17. android svg 线条动画教程,svg 线条动画
  18. python实现税后工资计算器_[宜配屋]听图阁
  19. (E2)ENVI-met模型建立——创建项目及数据库的使用
  20. flannel vxlan切换成host-gw

热门文章

  1. 将rmvb下载的电影转换成可用家庭dvd播放的dvd格式
  2. CDH5 添加数据节点
  3. 3D模型修补软件Magics的几个基本操作(设置中文、自定义工具页、缩放与拉伸)
  4. pandas 读取指定列 usecols
  5. HDU - 5775 树状数组
  6. php威盾解密的例子分享
  7. js中mache和replace的用法区别
  8. linux镜像网站大全
  9. 【Jenkins学习 】解决Jenkins节点断开不可用,报错:Disk space is too low. Only 0.803GB left on /tmp.
  10. 岭南意象——广东当代水墨展在巴黎开幕