• csr证书也称为p10证书https://blog.csdn.net/weixin_36296559/article/details/90383604?ops_request_misc=&request_id=&biz_id=102&utm_term=java生成p10证书&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-7-90383604.pc_v2_rank_blog_default
  • ,cer证书就是我们可以被系统识别到的证书。
  • 所有证书都是ans.1格式的,ans.1相当于json格式而已,对于这种格式可以用相关的工具查看,推荐一款工具,我自己用的查看工具:https://download.csdn.net/download/weixin_36296559/11190321
  • api是国密的包,基础的包、provider包(第三方厂商包),bcpkix(扩展包),mail(邮件加密包),这里大量用了基础包和bcpkix包

Java加密的常用的加密算法类型有三种

1单向加密:也就是不可逆的加密,例如MD5,SHA,HMAC

2对称加密:也就是加密方和解密方利用同一个秘钥对数据进行加密和解密,例如DES,PBE等等

3非对称加密:非对称加密分为公钥和秘钥,二者是非对称的,例如用私钥加密的内容需要使用公钥来解密,使用公钥加密的内容需要用私钥来解密,DSA,RSA...

而keyGenerator,KeyPairGenerator,SecretKeyFactory的三种使用方法刚好和这三种加密算法类型对上

keyGenerator:秘钥生成器,也就是更具算法类型随机生成一个秘钥,例如HMAC,所以这个大部分用在非可逆的算法中

SecretKeyFactory:秘密秘钥工厂,言外之意就是需要根据一个秘密(password)去生成一个秘钥,例如DES,PBE,所以大部分使用在对称加密中

KeyPairGenerator:秘钥对生成器,也就是可以生成一对秘钥,也就是公钥和私钥,所以大部分使用在非对称加密中

CSR是什么

CSR是Certificate Signing Request的英文缩写,即证书签名请求文件,是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

CSR什么样

CSR是以-----BEGIN CERTIFICATE REQUEST-----开头,-----END CERTIFICATE REQUEST-----为结尾的base64格式的编码。将其保存为文本文件,就是所谓的CSR文件。

CSR生成工具非常多,比如openssl工具,keystore explore,XCA等   在线工具:https://myssl.com/csr_create.html

这里有几个关键的要注意下:

  1. 域名必须正确输入(如果是非SSL证书,则输入相应的通用名)。

  2. 密钥算法选择RSA的话,密钥长度需要2048bit以上(这个默认是2048,没有特殊情况,不要特殊设置);ECC则是256bit以上。

  3. 摘要签名虽说目前可以任意,但建议是sha2-256以上。

CSR生成注意事项

匹配的KEY必须保存

有CSR必定有KEY,是成对的,CSR最终变成为证书,和私钥key配对使用。Key是以-----BEGIN RSA PRIVATE KEY-----开头的,-----END RSA PRIVATE KEY-----结尾的。Key必须保存好。

CSR生命周期

证书下发后,CSR无需使用,仅提交时候需要。

代码实现:

public static void main(String[] args) {Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());KeyPairGenerator localKeyPairGenerator = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());localKeyPairGenerator.initialize(256);KeyPair localKeyPair = localKeyPairGenerator.genKeyPair();X500NameBuilder localX500NameBuilder = new X500NameBuilder(BCStyle.INSTANCE);localX500NameBuilder.addRDN(BCStyle.CN, "www.baidu.com");//通用名称localX500NameBuilder.addRDN(BCStyle.C, "CN"); //国家localX500NameBuilder.addRDN(BCStyle.O, "CNOOC");//组织localX500NameBuilder.addRDN(BCStyle.L, "tianjin");//城市localX500NameBuilder.addRDN(BCStyle.ST, "tianjin");//省份localX500NameBuilder.addRDN(BCStyle.EmailAddress, "admin@39dian.com");X500Name localX500Name = localX500NameBuilder.build();JcaPKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(localX500Name, localKeyPair.getPublic());JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SM3WITHSM2");// 签名算法ContentSigner signer = csBuilder.build(localKeyPair.getPrivate());PKCS10CertificationRequest csr = p10Builder.build(signer);// PKCS10的请求byte[] bytes = csr.getEncoded();String s = Base64.getEncoder().encodeToString(bytes);// String s1="-----BEGIN CERTIFICATE REQUEST-----";//String s2= "-----END CERTIFICATE REQUEST-----";System.out.println(s);}

在线校验csr:https://www.chinassl.net/ssltools/decoder-csr.html

生成csr:https://myssl.com/csr_create.html

一般的数字证书产品的主题通常含有如下字段:
公用名称 (Common Name) 简称:CN 字段,对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端证书则为证书申请者的姓名; 
单位名称 (Organization Name) :简称:O 字段,对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端单位证书则为证书申请者所在单位名称; 
证书申请单位所在地: 
所在城市 (Locality) 简称:L 字段 
所在省份 (State/Provice) 简称:S 字段 
所在国家 (Country) 简称:C 字段,只能是国家字母缩写,如中国:CN 
其他一些字段:
电子邮件 (Email) 简称:E 字段 
多个姓名字段 简称:G 字段 
介绍:Description 字段 
电话号码:Phone 字段,格式要求 + 国家区号 城市区号 电话号码,如: +86 732 88888888 
地址:STREET  字段 
邮政编码:PostalCode 字段 
显示其他内容 简称:OU 字段

使用OpenSSL生成:

C:\Users\cakin>cd D:\OpenSSL\bin
C:\Users\cakin>d:
D:\OpenSSL\bin>openssl req -new -nodes -newkey rsa:2048 -keyout domain.key -out domain.csr
Loading 'screen' into random state - done
Generating a 2048 bit RSA private key
......................+++
....................+++
writing new private key to 'domain.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:sanxi
Locality Name (eg, city) []:xian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:network technology
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:
Email Address []:Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

从Email地址开始,下面的信息都不需要,请保留为空,直接回车。

证书工具类(csr、cer)相关推荐

  1. java和签名工具_java 证书工具keytool生成自签名证书和自签CA证书

    jdk自带的证书管理工具叫keytool,在jdk/bin目录下,可以用来生成自签名证书.导入导出证书.打印证书信息等. 1. 名词 自签名证书:用自己的私钥签发自己的公钥即主体信息生成的证书. 证书 ...

  2. java 证书查看工具_程序员必备工具 Java证书工具Keytool的使用

    一.简介 Keytool是JDK自带的证书管理工具,在jdk/bin目录下,可以用来生成自签名证书.导入导出证书.打印证书信息等. 回顾下前一章的一些概念:PKI:公钥基础设施 X.509 : PKI ...

  3. 证书工具+网络插件介绍

    1.1.证书工具介绍 证书制作工具:openssl;cfssl;keytool;makecert 问题1:啥叫HTTPS?场景:我是小明想和小红聊骚,但又怕别人听见.于是我们就各自制作了一个一对儿密钥 ...

  4. Java封装OkHttp3工具类

    点击关注公众号,Java干货及时送达  作者:如漩涡 https://blog.csdn.net/m0_37701381 Java封装OkHttp3工具类,适用于Java后端开发者 说实在话,用过挺多 ...

  5. 证书格式pfx和cer的区别及转换

    作为文件形式存在的证书一般有这几种格式: 1.带有私钥的证书 由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形 ...

  6. JAVA 邮件发送工具类

    1.封装邮件接收地址MODEL和邮件信息MODEL package com.sicdt.jnzxgzc.common.mail.model;import java.io.Serializable; / ...

  7. http工具类(支持https,连接池和失败重试)

    在实际项目中,经常会遇到调用外部(第三方)的接口,如果调用量较大的话,可能需要考虑连接池.失败重试.SSL证书等问题,以提升性能和稳定性. 以下代码是封装的小组件,供大家参考. maven依赖 < ...

  8. JAVA——Okhttp封装工具类

    基本概念 OKhttp:一个处理网络请求的开源项目,是安卓端最火热的轻量级框架. Maven <!--OK HTTP Client--><dependency><grou ...

  9. JAVA——保持cookie登录状态的HttpClient封装工具类

    在日常开发中,我们经常需要通过http协议去调用网络内容,虽然java自身提供了net相关工具包,但是其灵活性和功能总是不如人意,于是有人专门搞出一个httpclient类库,来方便进行Http操作. ...

最新文章

  1. 某港企高管:将孩子送出去吧!
  2. 下载Android源码流程(完整版)
  3. java dh密钥交换_java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换
  4. [转]12种JavaScript MVC框架之比较
  5. 显示行数 设置ssh终端_linux限制用户登陆的一些方法
  6. react使用setState注意事项
  7. How Tomcat Works(二十)
  8. 轻松实现深度Clone | Source Generators方式
  9. decimalformat精度丢失_php intval 两位小数乘以100后结果少1
  10. c c 语言编程项目实例,实例分享cmake编译一个简单c++项目(demo)
  11. 缓存 ASP.NET 页
  12. 第十一届中国开源黑客松+中国程序员节重磅来袭,这里将有你不能错过的精彩。...
  13. 小议数据库主键选取策略(转自吕震宇老师博文)
  14. Ubuntu/Linux 下切换 python 版本
  15. revit二次开发创建标高
  16. ASP.NET MVC中的下拉框数据查询
  17. 中国搜索引擎市场投资分析及前景预测报告
  18. 30岁学习编程晚么?
  19. 使用 Byzanz 录制 Gif 动画或 Ogv 视频
  20. Arduino Leonardo教程:如何回车,特殊按键定义,DIY超便宜的键盘主控

热门文章

  1. ros 如何禁止qq
  2. 小鸟云虚拟主机打开为什么显示是主机开通成功?
  3. golang 结构体struct、数组、结构体数组 定义与赋值 、json string转struct
  4. 2020年Java开发工程师面试问题
  5. 【渗透测试】漏洞扫描AWVS安装使用教程,三分钟手把手教会,非常简单
  6. Windows telnet 安装 使用 退出
  7. 【计量经济学】时间序列回归的渐进性
  8. 清华差生10年奋斗经历:各种反省各种彻悟--读完以后淋漓尽致
  9. python解压函数extractall在windows上报错FileNotFoundError [Errno 2] No such file or directory
  10. Bakkt机构托管业务获批;吉林省高级人民法院成全国首批加入“司法链”法院