下面是我用来解码.csr文件的代码。

public class CSRInfoDecoder {

private static Logger LOG = Logger.getLogger(CSRInfoDecoder.class.getName());

private static final String COUNTRY = "2.5.4.6";

private static final String STATE = "2.5.4.8";

private static final String LOCALE = "2.5.4.7";

private static final String ORGANIZATION = "2.5.4.10";

private static final String ORGANIZATION_UNIT = "2.5.4.11";

private static final String COMMON_NAME = "2.5.4.3";

private static final String EMAIL = "2.5.4.9";

private static final String csrPEM = "-----BEGIN CERTIFICATE REQUEST-----\n"

+ "MIICxDCCAawCAQAwfzELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAw\n"

+ "DgYDVQQHDAdDaGljYWdvMQ4wDAYDVQQKDAVDb2RhbDELMAkGA1UECwwCTkExDjAM\n"

+ "BgNVBAMMBUNvZGFsMR4wHAYJKoZIhvcNAQkBFg9rYmF4aUBjb2RhbC5jb20wggEi\n"

+ "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSrEF27VvbGi5x7LnPk4hRigAW\n"

+ "1feGeKOmRpHd4j/kUcJZLh59NHJHg5FMF7u9YdZgnMdULawFVezJMLSJYJcCAdRR\n"

+ "hSN+skrQlB6f5wgdkbl6ZfNaMZn5NO1Ve76JppP4gl0rXHs2UkRJeb8lguOpJv9c\n"

+ "tw+Sn6B13j8jF/m/OhIYI8fWhpBYvDXukgADTloCjOIsAvRonkIpWS4d014deKEe\n"

+ "5rhYX67m3H7GtZ/KVtBKhg44ntvuT2fR/wB1FlDws+0gp4edlkDlDml1HXsf4FeC\n"

+ "ogijo6+C9ewC2anpqp9o0CSXM6BT2I0h41PcQPZ4EtAc4ctKSlzTwaH0H9MbAgMB\n"

+ "AAGgADANBgkqhkiG9w0BAQsFAAOCAQEAqfQbrxc6AtjymI3TjN2upSFJS57FqPSe\n"

+ "h1YqvtC8pThm7MeufQmK9Zd+Lk2qnW1RyBxpvWe647bv5HiQaOkGZH+oYNxs1XvM\n"

+ "y5huq+uFPT5StbxsAC9YPtvD28bTH7iXR1b/02AK2rEYT8a9/tCBCcTfaxMh5+fr\n"

+ "maJtj+YPHisjxKW55cqGbotI19cuwRogJBf+ZVE/4hJ5w/xzvfdKjNxTcNr1EyBE\n"

+ "8ueJil2Utd1EnVrWbmHQqnlAznLzC5CKCr1WfmnrDw0GjGg1U6YpjKBTc4MDBQ0T\n"

+ "56ZL2yaton18kgeoWQVgcbK4MXp1kySvdWq0Bc3pmeWSM9lr/ZNwNQ==\n"

+ "-----END CERTIFICATE REQUEST-----\n";

public static void main(String[] args) {

InputStream stream = new ByteArrayInputStream(csrPEM.getBytes(StandardCharsets.UTF_8));

CSRInfoDecoder m = new CSRInfoDecoder();

m.readCertificateSigningRequest(stream);

}

public String readCertificateSigningRequest(InputStream csrStream) {

PKCS10CertificationRequest csr = convertPemToPKCS10CertificationRequest(csrStream);

String compname = null;

if (csr == null) {

LOG.warn("FAIL! conversion of Pem To PKCS10 Certification Request");

} else {

X500Name x500Name = csr.getSubject();

System.out.println("x500Name is: " + x500Name + "\n");

RDN cn = x500Name.getRDNs(BCStyle.EmailAddress)[0];

System.out.println(cn.getFirst().getValue().toString());

System.out.println(x500Name.getRDNs(BCStyle.EmailAddress)[0]);

System.out.println("COUNTRY: " + getX500Field(COUNTRY, x500Name));

System.out.println("STATE: " + getX500Field(STATE, x500Name));

System.out.println("LOCALE: " + getX500Field(LOCALE, x500Name));

System.out.println("ORGANIZATION: " + getX500Field(ORGANIZATION, x500Name));

System.out.println("ORGANIZATION_UNIT: " + getX500Field(ORGANIZATION_UNIT, x500Name));

System.out.println("COMMON_NAME: " + getX500Field(COMMON_NAME, x500Name));

System.out.println("EMAIL: " + getX500Field(EMAIL, x500Name));

}

return compname;

}

private String getX500Field(String asn1ObjectIdentifier, X500Name x500Name) {

RDN[] rdnArray = x500Name.getRDNs(new ASN1ObjectIdentifier(asn1ObjectIdentifier));

String retVal = null;

for (RDN item : rdnArray) {

retVal = item.getFirst().getValue().toString();

}

return retVal;

}

private PKCS10CertificationRequest convertPemToPKCS10CertificationRequest(InputStream pem) {

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

PKCS10CertificationRequest csr = null;

ByteArrayInputStream pemStream = null;

pemStream = (ByteArrayInputStream) pem;

Reader pemReader = new BufferedReader(new InputStreamReader(pemStream));

PEMParser pemParser = null;

try {

pemParser = new PEMParser(pemReader);

Object parsedObj = pemParser.readObject();

System.out.println("PemParser returned: " + parsedObj);

if (parsedObj instanceof PKCS10CertificationRequest) {

csr = (PKCS10CertificationRequest) parsedObj;

}

} catch (IOException ex) {

LOG.error("IOException, convertPemToPublicKey", ex);

} finally {

if (pemParser != null) {

IOUtils.closeQuietly(pemParser);

}

}

return csr;

}

}

在上面的代码中,我转换的csrPem String into a InputStream for my own testing purposes so you can eliminate that step and directly use ByteArrayInputStream`。

java der 解码_如何解码Java中的.csr文件以提取其内容相关推荐

  1. 在F5 BIG IP版本9中生成CSR文件的教程

    在申请SSL证书时,申请者必须为您的 Web 服务器上的域名或主机名创建证书签名请求 (CSR).CSR是向证书颁发机构 (CA) 发送您的公钥的标准化方式,该公钥与服务器上的秘密私钥配对,并提供有关 ...

  2. java 编码解码_深入解析Java中的编码转换以及编码和解码操作

    一.Java编码转换过程 我们总是用一个java类文件和用户进行最直接的交互(输入.输出),这些交互内容包含的文字可能会包含中文.无论这些java类是与数据库交互,还是与前端页面交互,他们的生命周期总 ...

  3. java console 交互_实例讲解java中Console类的用法

    java的Console类的使用方法及实例 java的Console类的使用方法及实例 JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备.如果你的Java程序要与Win ...

  4. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  5. java实现递归算法_如何在Java中实现二进制搜索算法而无需递归

    java实现递归算法 by javinpaul 由javinpaul 流行的二进制搜索算法的迭代实现,用于在排序数组中查找元素. (An Iterative implementation of the ...

  6. java 添加注解_你知道Java中的package-info的作用吗?

    package-info.java对于日常业务开发的开发者来说,可能有点陌生,如果我们再项目中创建一个package-info.java,你会发现该类只有一个packge,如下 我们无法在该java文 ...

  7. java 解决死锁_如何解决java中的死锁问题

    一.死锁的定义 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去. 那么我们换一个更加规范的定义:集合中的每一个进程都在 ...

  8. java插入图片_如何在java窗体程序中添加图片

    打开eclipse,创建一个java工程项目,创建完后在src下新建一个类Window,由于要插入图片,所以还在工程目录下创建一个文件夹imgs,里面放了一张60*60的图片,创建后的工程目录和图片, ...

  9. java安卓计时器_如何在android中设置计时器

    通过java.util.Timer和java.util.TimerTask使用计时器的标准Java方法在Android中运行良好,但是你应该知道这个方法创建了一个新线程. 您可以考虑使用非常方便的Ha ...

最新文章

  1. Qt for Android (Alpha) 发布
  2. 【转载】 Python 调整屏幕分辨率
  3. Microsoft Exchange Server 2010测试四成员DAG
  4. 2014-04-03研究笔记整理
  5. Truncate a string
  6. (转)搜索Maven仓库 获取 groupid artifactId
  7. websocket实现群聊
  8. 结对-人机对战象棋游戏-开发过程
  9. 开源开放 | 《大词林》开源 75 万核心实体和围绕核心实体的细粒度概念、关系列表...
  10. ZOJ - 2402 DP方案数
  11. 【模拟电路】PID简介
  12. Java制作一个更加真实的按钮
  13. Matlab实现Sandbox方法计算分形维数
  14. 皮皮虾vs最右短视频分析
  15. Redis基础常用命令入门
  16. PHP之ctype扩展
  17. 市场调研及发展前景分析报告有什么作用
  18. 4k电视接电脑鼠标延迟解决
  19. 调优之网络调优-网卡绑定
  20. Systrace之 input 解读

热门文章

  1. Python解读:五月天线上演唱会刷屏!这里有你的青春吗?
  2. postgresql出现Is the server running locally and accepting connections on Unix domain socket /tmp/.s.
  3. 单位阶跃信号matlab,【单位|单位阶跃信号的表示-matlabWord版】
  4. 阿里大鱼短信平台使用-Java版
  5. 怎么用计算机化学精密度,计算机在分析化学和有机化学的应用
  6. 醉酒后的《梦里水乡》
  7. kafka 故障: 监控出现 offline partition 1个和大量under replicated 状态分区.
  8. 91sp.vido.ws.php,104.27.179.100
  9. gitk 检索提交记录方法
  10. win10安装php环境死机,win10死机频繁怎么办