java处理加密文件中常见的两种数字证书文件格式(cer和pfx)

数字证书文件格式(cer和pfx)的区别

1.带有私钥的证书

由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。

2.二进制编码的证书

证书中没有私钥,DER 编码二进制格式的证书文件,以cer作为证书文件后缀名。

3.Base64编码的证书

证书中没有私钥,BASE64 编码格式的证书文件,也是以cer作为证书文件后缀名。

由定义可以看出,只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥。

在pfx证书的导入过程中有一项是“标志此密钥是可导出的。这将您在稍候备份或传输密钥”。一般是不选中的,如果选中,别人就有机会备份你的密钥了。如果是不选中,其实密钥也导入了,只是不能再次被导出。这就保证了密钥的安全。

如果导入过程中没有选中这一项,做证书备份时“导出私钥”这一项是灰色的,不能选。只能导出cer格式的公钥。如果导入时选中该项,则在导出时“导出私钥”这一项就是可选的。

如果要导出私钥(pfx),是需要输入密码的,这个密码就是对私钥再次加密,这样就保证了私钥的安全,别人即使拿到了你的证书备份(pfx),不知道加密私钥的密码,也是无法导入证书的。相反,如果只是导入导出cer格式的证书,是不会提示你输入密码的。因为公钥一般来说是对外公开的,不用加密。

在Security编程中,有几种典型的密码交换信息文件格式:

DER-encoded certificate: .cer, .crt

PEM-encoded message: .pem

PKCS#12 Personal Information Exchange: .pfx, .p12

PKCS#10 Certification Request: .p10

PKCS#7 cert request response: .p7r

PKCS#7 binary message: .p7b

.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。

.pem跟crt/cer的区别是它以Ascii来表示。

pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式

p10是证书请求

p7r是CA对证书请求的回复,只用于导入

p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。

其中,介绍如何从p12/pfx文件中提取密钥对及其长度:

1,首先,读取pfx/p12文件(需要提供保护密码)

2,通过别名(Alias,注意,所有证书中的信息项都是通过Alias来提取的)提取想要分析的证书链

3,再将其转换为一个以X509证书结构体

4,提取里面的项,如果把证书项放在第一位(单一证书),直接读取 x509Certs[0](见下面的代码)这个X509Certificate对象

5,X509Certificate对象有很多方法,读取RSA密钥(公私钥)及其长度(见?topicId=43786&forumId=55&),

X509Certificate keyPairCert = x509Certs[0];

int iKeySize = X509CertUtil.getCertificateKeyLength(keyPairCert);

System.out.println(“证书密钥算法=”+keyPairCert.getPublicKey().getAlgorithm());

System.out.println(“证书密钥长度=”+iKeySize);

提取了所需要的信息。

package  org.dev2dev.client.keypair;

import  java.io.File;

import  java.io.FileInputStream;

import  java.io.FileNotFoundException;

import  java.io.IOException;

import  java.security.KeyStore;

import  java.security.KeyStoreException;

import  java.security.NoSuchAlgorithmException;

import  java.security.NoSuchProviderException;

import  java.security.Security;

import  java.security.cert.Certificate;

import  java.security.cert.CertificateException;

import  java.security.cert.X509Certificate;

import  org.dev2dev.security.keytool.X509CertUtil;

public   class  LoadKeyFromPKCS12   {

public   static   void  main(String[] args)   {

try    {

//  Open an input stream on the keystore file

String pfxFileName = ” c:\\david.turing.pfx ” ;

String pfxPassword = ” 123456 ” ;

File fPkcs12  =   null ;

if  (pfxFileName  !=   null )   {

//  Open the file

fPkcs12  =   new  File(pfxFileName);

}

FileInputStream fis  =   new  FileInputStream(fPkcs12);

//  Create a keystore object

KeyStore keyStore  =   null ;

try

{

//  Need BC provider for PKCS #12, BKS and UBER

if  (Security.getProvider( ” BC ” )  ==   null )

{

throw   new  Exception( ” 不能Load入BouncyCastle! ” );

}

keyStore  =  KeyStore.getInstance( ” PKCS12 ” ,  ” BC ” );

}

catch  (KeyStoreException ex)

{

throw   new  Exception( ” 不能正确解释pfx文件! ” );

}

catch  (NoSuchProviderException ex)

{

throw   new  Exception( ” Security Provider配置有误! ” );

}

try

{

//  Load the file into the keystore

keyStore.load(fis, pfxPassword.toCharArray());

}

catch  (CertificateException ex)

{

throw   new  Exception( ” 证书格式问题! ” );

}

catch  (NoSuchAlgorithmException ex)

{

throw   new  Exception( ” 算法不支持! ” );

}

catch  (FileNotFoundException ex)

{

throw   new  Exception( ” pfx文件没找到 ” );

}

catch  (IOException ex)

{

throw   new  Exception( ” 读取pfx有误! ” );

}

// 获取证书链的中keyEntry的别名

Certificate[] certs  =  keyStore.getCertificateChain( ” david.turing ” );

X509Certificate[] x509Certs  =  nvertCertificates(certs);

if  (x509Certs  ==   null )

{

return ;

}

x509Certs  =  X509CertUtil.orderX509CertChain(x509Certs);

X509Certificate keyPairCert  =  x509Certs[ 0 ];

int  iKeySize  =  X509CertUtil.getCertificateKeyLength(keyPairCert);

System.out.println( ” 证书密钥算法= ” + keyPairCert.getPublicKey().getAlgorithm());

System.out.println( ” 证书密钥长度= ” + iKeySize);

}   catch  (Exception e)   {

e.printStackTrace();

}

}

}

相关搜索

pfx导出cer

pfx证书导出cer

java生成pfx cer

java pfx cer

pfx cer文件区别

cer pfx

pfx转cer

生成cer公钥和pfx私钥

cer转pfx工具

java exchange 数字证书认证_java处理加密文件---数字证书文件格式(cer和pfx)的区别 - 数安时代(GDCA)SSL证书官网...相关推荐

  1. java ssl证书连接_JAVA连接HTTPS - HTTPS SSL 教程 - 数安时代(GDCA)SSL证书官网

    使用Apache的HttpClient 和 HttpCore https://hc.apache.org package cn.getssl.https; import java.io.Buffere ...

  2. linux下apache服务起不来,Linux系统下Apache服务器启动失败的解决办法 - Apache - 数安时代(GDCA)SSL证书官网...

    系统重启后发现,Apache启动失败 报错如下: # ./apachectl start (98)Address already in use: make_sock: could not bind t ...

  3. mysql t.com_window系统上Apache PHP MySQL Tcomcat Resin整合 - Apache - 数安时代(GDCA)SSL证书官网...

    系统要求: 硬件能跑起操作系统即可 Win2K.WinXP或Win2003操作系统 前期准备: 所需软件列表:(本配置以下列软件版本完成) 1. APACHE_2.0.47-win32-x86-no_ ...

  4. vista服务器系统,Vista系统搭建服务器 - Apache - 数安时代(GDCA)SSL证书官网

    (提示:本文的主要方法同样适用于Windows XP/2000) 自从转入Vista后,主要就是不停的尝试,看看这个被微软吹嘘的"伟大而神奇"的操作系统到底如何,一直也没做什么正事 ...

  5. apache负载均衡 健康检查_Apache服务器配置负载均衡的方法 - Apache - 数安时代(GDCA)SSL证书官网...

    很多网友都在询问apache的负载均衡配置问题.那么我们在此,就再详细的说一说这个具体的过程.当然,说到apache负载均衡肯定离不开tomacat的使用,以及对mod_jk的了解.这些准备工作,还是 ...

  6. php扩展库 没有mysql_PHP没有加载MySQL扩展模块的解决办法 - Apache - 数安时代(GDCA)SSL证书官网...

    今天配置php 的时候,发现没配起mysql ,wordpress提示我需要 mysql 的module 之后上google搜索,大多数都是说php.ini 没加载起 之后看phpinfo() 里  ...

  7. 错误模块名称 php5ts.dll_Apache服务器遇到PHP5ts.dll错误的解决办法 - Apache - 数安时代(GDCA)SSL证书官网...

    这两天安装apache+php时遇到php5ts.dll错误问题.经过几天折腾,终于找到原因. 一.平台 操作系统:windows 2003: Apache:2.2.17.0,使用httpd-2.2. ...

  8. php fpm 优化502,Nginx+PHP-FPM环境访问网站出现502错误的优化方法 - Nginx - 数安时代(GDCA)SSL证书官网...

    游戏后端代码采用Nginx+PHP-FPM的方式部署.放问游戏的时候偶尔会出现502错误. Nginx错误日志出现以下日志 2014/07/05 17:20:58 [error] 18431#0: * ...

  9. arm linux php,在ARM Linux系统上面安装Apache+sqlite+PHP的详细讲解 - Apache - 数安时代(GDCA)SSL证书官网...

    经过几天的努力终于在arm-linux平台上搭建了apache+sqlite+php平台. apche与sqlite网上有不少资料,而php for arm-linux很少.为了在arm平台上安装ph ...

最新文章

  1. linux主机怎么建站,linux主机建站
  2. 可以看游资的app_跟随一线游资操作,轻松收获涨停板
  3. 采购订单更改日期的妙用
  4. L1-004.计算摄氏温度
  5. tmux颜色高亮跟vim不一致的情况
  6. java11创建项目_2019-04-11 使用IDEA创建SpringBoot项目
  7. Jquery实战——横纵向的菜单
  8. JQuery Datatables 样式Style
  9. 两种自定义表单设计方案 [转贴]
  10. Telnet 服务器软件的安装
  11. 加速下载 玩转土豆网FLV视频四招
  12. json转java对象_java对象与json对象间的相互转换的方法
  13. 【学习方法】 高效记忆秘籍,背书轻松开挂!3个方法专治记不住忘得快,让你像喝水一样高效学习!
  14. 计算两个时间的间隔时长
  15. NODE_多文件上传
  16. 计算机word表格基础,Word表格的作-计算机基础.doc
  17. 06、NMAP高级使用技巧和漏洞扫描发现
  18. ros之模拟导航算法
  19. android edl模式,高通方案生成大包后,如何刷机
  20. 美国警方致命枪击案数据可视化分析 上

热门文章

  1. nacis服务注册原理_服务注册和发现之Eureka原理篇
  2. 求两数之和(三种解法)
  3. xxxx has no uot-of-line virtual method definitions
  4. 计算机音响使用方法,教你如何正确使用多功能迷你音响
  5. quartus模块图中模块文字显示不全
  6. 大白话彻底搞懂HBase RowKey详细设计
  7. 微信的「拍一拍」功能,要被大家玩坏了...
  8. 自定义View-仿微信群组头像
  9. HDU - 1597 find the nth digit 【找规律】
  10. 软件架构设计---层次系统架构风格