『壹』 java中怎么获取jks证书文件中的内容
JavaKeyStore的类型JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型(我所知道的共有5种,JKS,JCEKS,PKCS12,BKS,UBER)。JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。JCEKS在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDes)。PKCS#12是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,也称为PFX文件,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。BKS来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操作,读者可以用Keytool去TryTry。UBER比较特别,当密码是通过命令行提供的时候,它只能跟keytool交互。整个keystore是通过PBE/SHA1/Twofish加密,因此keystore能够防止被误改、察看以及校验。以前,SunJDK(提供者为SUN)允许你在不提供密码的情况下直接加载一个Keystore,类似cacerts,UBER不允许这种情况。证书导入Der/Cer证书导入:要从某个文件中导入某个证书,使用keytool工具的-import命令:1keytool-import-filemycert.der-keystoremykeystore.jks如果在-keystore选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。如果不指定-keystore选项,则缺省密钥仓库将是宿主目录中名为.keystore的文件。如果该文件并不存在,则它将被创建。创建密钥仓库时会要求输入访问口令,以后需要使用此口令来访问。可使用-list命令来查看密钥仓库里的内容:1keytool-list-rfc-keystoremykeystore.jksP12格式证书导入:keytool无法直接导入PKCS12文件。第一种方法是使用IE将pfx证书导入,再导出为cert格式文件。使用上面介绍的方法将其导入到密钥仓库中。这样的话仓库里面只包含了证书信息,没有私钥内容。第二种方法是将pfx文件导入到IE浏览器中,再导出为pfx文件。新生成的pfx不能被导入到keystore中,报错:keytool错误:java.lang.Exception:所输入的不是一个X.509认证。新生成的pfx文件可以被当作keystore使用。但会报个错误asunknownattr1.3.6.1.4.1.311.17.1,查了下资料,说IE导出的就会这样,使用Netscape就不会有这个错误.第三种方法是将pfx文件当作一个keystore使用。但是通过微软的证书管理控制台生成的pfx文件不能直接使用。keytool不认此格式,报keytool错误:java.io.IOException:。需要通过OpenSSL转换一下:1opensslpkcs12-inmycerts.pfx-outmycerts.pem2opensslpkcs12-export-inmycerts.pem-outmykeystore.p12通过keytool的-list命令可检查下密钥仓库中的内容:1keytool-rfc-list-keystoremykeystore.p12-storetypepkcs12这里需要指明仓库类型为pkcs12,因为缺省的类型为jks。这样此密钥仓库就即包含证书信息也包含私钥信息。P7B格式证书导入:keytool无法直接导入p7b文件。需要将证书链RootServer.p7b(包含根证书)导出为根rootca.cer和子rootcaserver.cer。将这两个证书导入到可信任的密钥仓库中。1keytool-import-aliasrootca-trustcacerts-filerootca.cer-keystoretestkeytrust.jks遇到是否信任该证书提示时,输入y1keytool-import-aliasrootcaserver-trustcacerts-filerootcaserver.cer-keystoretestkeytrust.jks总结P12格式的证书是不能使用keytool工具导入到keystore中的TheSun'sPKCS12Keystore对从IE和其他的windows程序生成的pfx格式的证书支持不太好.P7B证书链不能直接导入到keystore,需要将里面的证书导出成cer格式,再分别导入到keystore。
『贰』 什么是X509格式的证书在java中能否使用X509Certificate对象获得证书的私钥信息
证书里怎么可能有私钥嘛,异想天开
『叁』 如何导入.cer证书到Java keystore
1. 如果你想验证你所需要的私钥。有没有其他的选项。 证书是有额外的属性(国家专,...)是由证书颁发机构garants的附加属属性为true签名的公钥。
CER文件证书和没有私钥。私钥设置有。PFX密钥库正常文件。 如果你真的是验证你已经导入了私钥。
你通常可以导入。与任何问题的CER证书 密钥工具-importcert文件certificate.cer-密钥库的keystore.jks别名“别名”
2. 你已经有了该证书可能是服务器的证书,或签名服务器的证书。你会需要它,使您的Web服务客户端端可以验证服务器。 但是,如果你还需要使用SSL进行客户端端身份验证,那么你需要让自己的证书,来验证您的Web服务客户端端。
为此 CodeGo.net,您需要创建一个证书请求,这个过程涉及到创建自己的私有密钥,以及相应的公开密钥,以及安装随着(电子邮件,网站等)的公共密钥这就是所谓的证书请求文件。
『肆』 Java如何读取PFX密钥文件
package com.Jinhill;
import java.io.*;
import java.util.*;
import java.security.*;
import java.security.cert.Certificate;
public class ReadPFX {
public ReadPFX (){
}
//转换成十六进制字符串
public static String Byte2String(byte[] b) {
String hs="";
String stmp="";
for (int n=0;n<b.length;n++) {
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
//if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
public static byte[] StringToByte(int number) {
int temp = number;
byte[] b=new byte[4];
for (int i=b.length-1;i>-1;i--){
b[i] = new Integer(temp&0xff).byteValue();//将最高位保存在最低位
temp = temp >> 8; //向右移8位
}
return b;
}
private PrivateKey GetPvkformPfx(String strPfx, String strPassword){
try {
KeyStore ks = KeyStore.getInstance("PKCS12");
FileInputStream fis = new FileInputStream(strPfx);
// If the keystore password is empty(""), then we have to set
// to null, otherwise it won't work!!!
char[] nPassword = null;
if ((strPassword == null) || strPassword.trim().equals("")){
nPassword = null;
}
else
{
nPassword = strPassword.toCharArray();
}
ks.load(fis, nPassword);
fis.close();
System.out.println("keystore type=" + ks.getType());
// Now we loop all the aliases, we need the alias to get keys.
// It seems that this value is the "Friendly name" field in the
// detals tab <-- Certificate window <-- view <-- Certificate
// Button <-- Content tab <-- Internet Options <-- Tools menu
// In MS IE 6.
Enumeration enumas = ks.aliases();
String keyAlias = null;
if (enumas.hasMoreElements())// we are readin just one certificate.
{
keyAlias = (String)enumas.nextElement();
System.out.println("alias=[" + keyAlias + "]");
}
// Now once we know the alias, we could get the keys.
System.out.println("is key entry=" + ks.isKeyEntry(keyAlias));
PrivateKey prikey = (PrivateKey) ks.getKey(keyAlias, nPassword);
Certificate cert = ks.getCertificate(keyAlias);
PublicKey pubkey = cert.getPublicKey();
System.out.println("cert class = " + cert.getClass().getName());
System.out.println("cert = " + cert);
System.out.println("public key = " + pubkey);
System.out.println("private key = " + prikey);
return prikey;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
『伍』 java客户端怎么访问带有pfx格式证书的https网站(服务器)呢,
使用 访问https地址。
以下是导入JKS证书的方式,可以参考。
String keystorefile = "file";
String keystorepw = "password";
String keypw = "password";
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load( new FileInputStream(keystorefile), keystorepw.toCharArray());
KeyManagerFactory keymanagerfactory = KeyManagerFactory.getInstance("SunX509");
keymanagerfactory.init(keystore, keypw.toCharArray());
KeyManager akeymanager[] = keymanagerfactory.getKeyManagers();
TrustManagerFactory trustmanagerfactory = TrustManagerFactory.getInstance("SunX509");
trustmanagerfactory.init(keystore);
TrustManager atrustmanager[] = trustmanagerfactory.getTrustManagers();
sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(akeymanager, atrustmanager, null);
sslSocketFactory = sslcontext.getSocketFactory();
String url = "asdfdf";
URL testURL = new URL(url);
HttpURLConnection urlConnection = (HttpURLConnection) testURL.openConnection();
if (urlConnection instanceof HttpsURLConnection) {
HttpsURLConnection conn = (HttpsURLConnection) urlConnection;
conn.setSSLSocketFactory(sslSocketFactory);
}
『陆』 如何在Java处理PFX格式证书
开发人员通常需要将PFX文件转换为某些不同的格式,如PEM或JKS,以便可以为使用SSL通信的独立Java客户端或WebLogic Server使用
在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
『柒』 java如何生成.pfx文件java语言可以生成pfx文件吗
/**
* 证书私钥存储设施
*
* @param alias
* KeyStore别名
* @param key
* 密钥(这里是私钥)
* @param password
* 保存密码
* @param chain
* 证书链
* @param filePath
* PFX文件路径
* @throws KeyStoreException
* @throws NoSuchAlgorithmException
* @throws CertificateException
* @throws IOException
*/
private void createKeyStore(String alias, Key key, char[] password,
Certificate[] chain, String filePath) throws KeyStoreException,
NoSuchAlgorithmException, CertificateException, IOException {
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(null, password);
keyStore.setKeyEntry(alias, key, password, chain);
FileOutputStream fos = new FileOutputStream(filePath);
keyStore.store(fos, password);
fos.close();
}
『捌』 如何在java创建证书PFX文件吗
开发人员通常需要将PFX文件转换为某些不同的格式,如PEM或JKS,以便可以为使用版SSL通信的独立Java客户端或权WebLogic Server使用
在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
『玖』 php实现签名,手头上有中行提供的pfx文件,进行签名后传递给java做签名验证,请大神帮忙。
你的问题我做过,我使用是第二个方法实现的,我把相关文档传到了csdn上去了,你可以去看看,实在不行我发给你
『拾』 cer 与 pfx 证书的加密与解密
JAVA不能直接使用pfx证书的,需要去java网站上下一个keytools工具,导入pfx证书后才能使用版。
cer和pfx是成对的,你做了个权cer的话必然会同时生成一个pfx,不晓得你的cer是怎么做的。
一般来说是这样的,你先用一些工具,比如刚才说的java的keytools,或者IIS生成一个密钥请求crs,然后把这个crs发送给密钥发放的CA,你可以自己搭一个CA或者去买一个,CA会再发给你一个确认后的证书,你再使用这个确认后的cer来结束证书申请过程,最终得到一个私钥和一个密钥。
具体的过程参考这里:怎么申请怎么使用都包含了
http://www.cnnic.cn/jczyfw/wzws/bzkx/jsjs/
你是JAVA开发的话可以看看tomcat或者apach的,这里用的CA是CNNIC的,不过别家的也都大同小异。