『壹』 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的,不過別家的也都大同小異。