java exchange 数字证书认证_java处理加密文件---数字证书文件格式(cer和pfx)的区别 - 数安时代(GDCA)SSL证书官网...
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证书官网...相关推荐
- java ssl证书连接_JAVA连接HTTPS - HTTPS SSL 教程 - 数安时代(GDCA)SSL证书官网
使用Apache的HttpClient 和 HttpCore https://hc.apache.org package cn.getssl.https; import java.io.Buffere ...
- linux下apache服务起不来,Linux系统下Apache服务器启动失败的解决办法 - Apache - 数安时代(GDCA)SSL证书官网...
系统重启后发现,Apache启动失败 报错如下: # ./apachectl start (98)Address already in use: make_sock: could not bind t ...
- mysql t.com_window系统上Apache PHP MySQL Tcomcat Resin整合 - Apache - 数安时代(GDCA)SSL证书官网...
系统要求: 硬件能跑起操作系统即可 Win2K.WinXP或Win2003操作系统 前期准备: 所需软件列表:(本配置以下列软件版本完成) 1. APACHE_2.0.47-win32-x86-no_ ...
- vista服务器系统,Vista系统搭建服务器 - Apache - 数安时代(GDCA)SSL证书官网
(提示:本文的主要方法同样适用于Windows XP/2000) 自从转入Vista后,主要就是不停的尝试,看看这个被微软吹嘘的"伟大而神奇"的操作系统到底如何,一直也没做什么正事 ...
- apache负载均衡 健康检查_Apache服务器配置负载均衡的方法 - Apache - 数安时代(GDCA)SSL证书官网...
很多网友都在询问apache的负载均衡配置问题.那么我们在此,就再详细的说一说这个具体的过程.当然,说到apache负载均衡肯定离不开tomacat的使用,以及对mod_jk的了解.这些准备工作,还是 ...
- php扩展库 没有mysql_PHP没有加载MySQL扩展模块的解决办法 - Apache - 数安时代(GDCA)SSL证书官网...
今天配置php 的时候,发现没配起mysql ,wordpress提示我需要 mysql 的module 之后上google搜索,大多数都是说php.ini 没加载起 之后看phpinfo() 里 ...
- 错误模块名称 php5ts.dll_Apache服务器遇到PHP5ts.dll错误的解决办法 - Apache - 数安时代(GDCA)SSL证书官网...
这两天安装apache+php时遇到php5ts.dll错误问题.经过几天折腾,终于找到原因. 一.平台 操作系统:windows 2003: Apache:2.2.17.0,使用httpd-2.2. ...
- php fpm 优化502,Nginx+PHP-FPM环境访问网站出现502错误的优化方法 - Nginx - 数安时代(GDCA)SSL证书官网...
游戏后端代码采用Nginx+PHP-FPM的方式部署.放问游戏的时候偶尔会出现502错误. Nginx错误日志出现以下日志 2014/07/05 17:20:58 [error] 18431#0: * ...
- arm linux php,在ARM Linux系统上面安装Apache+sqlite+PHP的详细讲解 - Apache - 数安时代(GDCA)SSL证书官网...
经过几天的努力终于在arm-linux平台上搭建了apache+sqlite+php平台. apche与sqlite网上有不少资料,而php for arm-linux很少.为了在arm平台上安装ph ...
最新文章
- linux主机怎么建站,linux主机建站
- 可以看游资的app_跟随一线游资操作,轻松收获涨停板
- 采购订单更改日期的妙用
- L1-004.计算摄氏温度
- tmux颜色高亮跟vim不一致的情况
- java11创建项目_2019-04-11 使用IDEA创建SpringBoot项目
- Jquery实战——横纵向的菜单
- JQuery Datatables 样式Style
- 两种自定义表单设计方案 [转贴]
- Telnet 服务器软件的安装
- 加速下载 玩转土豆网FLV视频四招
- json转java对象_java对象与json对象间的相互转换的方法
- 【学习方法】 高效记忆秘籍,背书轻松开挂!3个方法专治记不住忘得快,让你像喝水一样高效学习!
- 计算两个时间的间隔时长
- NODE_多文件上传
- 计算机word表格基础,Word表格的作-计算机基础.doc
- 06、NMAP高级使用技巧和漏洞扫描发现
- ros之模拟导航算法
- android edl模式,高通方案生成大包后,如何刷机
- 美国警方致命枪击案数据可视化分析 上