㈠ PKCS#12的介紹
PKCS#12是一種交換數字證書的加密標准,用來描述個人身份信息。如:用戶公鑰、私鑰、證書等。
㈡ 如何在由openssl生成的java中使用.key和.crt文件
您好,這樣:
第一步,從key和crt生成pkcs12格式的keystore
openssl pkcs12 -export -in mycert.crt -inkey mykey.key
-out mycert.p12 -name tomcat -CAfile myCA.crt
-caname root -chain
第二步 生成tomcat需要的keystore
keytool -importkeystore -v -srckeystore mycert.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore tomcat.keystore -deststoretype jks -deststorepass 123456 。
㈢ java,已知加密字元串,怎麼生成cer文件求代碼
packagecom.tgtbj.dsf.certhelper;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.math.BigInteger;
importjava.security.KeyPair;
importjava.security.KeyPairGenerator;
importjava.security.KeyStore;
importjava.security.cert.Certificate;
importjava.security.cert.CertificateEncodingException;
importjava.security.cert.X509Certificate;
importjava.util.Date;
importjavax.security.auth.x500.X500Principal;
importorg.bouncycastle.x509.X509V3CertificateGenerator;
publicclassTT{
publicstaticvoidgenCertFile(StringcertPath,Stringpassword,
intkeysize,Stringalgorithm)throwsException{
//創建KeyStore
KeyStorestore=KeyStore.getInstance("PKCS12");
store.load(null,null);
//生成一對公私鑰,這部分如果自己已經有了PublicKey,可以直接在下面使用,不用生成
KeyPairGeneratorkpg=KeyPairGenerator.getInstance("RSA");
kpg.initialize(keysize);
KeyPairkeyPair=kpg.generateKeyPair();
//這個字元串根據自己情況填
Stringissuer="C=CN,ST=BJ,L=BJ,O=SSS,OU=SC,CN=SSS";
Stringsubject=issuer;
=newX509V3CertificateGenerator();
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
certGen.setIssuerDN(newX500Principal(issuer));
certGen.setNotBefore(newDate(System.currentTimeMillis()-10*365
*24*60*60*1000));
certGen.setNotAfter(newDate(System.currentTimeMillis()+10*365*24
*60*60*1000));
certGen.setSubjectDN(newX500Principal(subject));
certGen.setPublicKey(keyPair.getPublic());//此處可直接傳入線程的PublicKey
if(algorithm==null||algorithm.equals("")){
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
}else{
certGen.setSignatureAlgorithm(algorithm);
}
X509Certificatecert=certGen.generateX509Certificate(keyPair
.getPrivate());
//私鑰有現成的也可直接傳入
store.setKeyEntry("alias",keyPair.getPrivate(),
password.toCharArray(),newCertificate[]{cert});
//導出為cer證書
try{
FileOutputStreamfos=newFileOutputStream(certPath+".cer");
fos.write(cert.getEncoded());
fos.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(CertificateEncodingExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(Stringargs[])throwsException{
genCertFile("D:/opop1","qwafrt",1024,"SHA1WithRSA");
}
}
㈣ 如何編程讀取PKCS#12格式的證書與私鑰
pkcs8格式的私鑰轉換工具。它處理在PKCS#8格式中的私鑰文件。它可以用多樣的PKCS#5 (v1.5 and v2.0)和 PKCS#12演算法來處理沒有解密的PKCS#8 PrivateKeyInfo格式和EncryptedPrivateKeyInfo格式。
用法:
[cpp] view plain
openssl pkcs8 [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename]
[-passout arg] [-topk8] [-noiter] [-nocrypt] [-nooct] [-embed] [-nsdb] [-v2 alg] [-v1 alg] [-engine id]
選項說明:
-inform PEM|DER::輸入文件格式,DER或者PEM格式。DER格式採用ASN1的DER標准格式。一般用的多的都是PEM格式,就是base64編碼格式。
-outform DER|PEM:輸出文件格式,DER或者PEM格式。
-in filename:輸入的密鑰文件,默認為標准輸入。如果密鑰被加密,會提示輸入一個密鑰口令。
-passin arg:輸入文件口令保護來源。
-out filename:輸出文件,默認為標准輸出。如果任何加密操作已經執行,會提示輸入一個密鑰值。輸出的文件名字不能和輸入的文件名一樣。
-passout arg:輸出文件口令保護來源。
㈤ 如何連接到一個安全的使用SSL在java和PKCS12文件的網站嗎
在項目開發中,有時會遇到與SSL安全證書導入打交道的,如何把證書導入java中的cacerts證書庫呢?
其實很簡單,方法如下:
每一步:進入某個ht tp s:/ /ww w.x xx.c o m開 頭的網 站,把要導入的證書過來,
在該網頁上右鍵 >> 屬性 >> 點擊"證書" >>
再點擊上面的"詳細信息"切換欄 >>
再點擊右下角那個"復制到文件"的按鈕
就會彈出一個證書導出的向導對話框,按提示一步一步完成就行了。
例如:保存為abc.cer,放在C盤下
第二步:如何把上面那步的(abc.cer)這個證書導入java中的cacerts證書庫里?
方法如下
假設你的jdk安裝在C:\jdk1.5這個目錄,
開始 >> 運行 >> 輸入cmd 進入dos命令行 >>
再用cd進入到C:\jdk1.5\jre\lib\security這個目錄下
敲入如下命令回車執行
keytool -import -alias cacerts -keystore cacerts -file d:\software\AKAZAM-Mail.cer
此時命令行會提示你輸入cacerts證書庫的密碼,
你敲入changeit就行了,這是java中cacerts證書庫的默認密碼,
你自已也可以修改的。
導入後用-list查看(沒有使用-alias指定別名,所以是mykey),其中md5會和證書的md5對應上。
mykey, 2012-10-26, trustedCertEntry,
認證指紋 (MD5): 8D:A2:89:9A:E4:17:07:0B:BD:B0:0C:36:11:39:D0:3D
ok,大功告成!
以後更新時,先刪除原來的證書,然後導入新的證書
keytool -list -keystore cacerts
keytool -delete -alias akazam_email -keystore cacerts
keytool -import -alias akazam_email -file akazam_email.cer -keystore cacerts
自定義文件和密碼路徑,還沒有驗證:
Define the TrustStore using the JAVA_OPTS variable on the Stash Server:
You will have to do the following:
On Windows:
JAVA_OPTS = -Djavax.net.ssl.trustStore="%JAVA_HOME%\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword="changeit"
On Linux:
JAVA_OPTS = -Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts" -Djavax.net.ssl.trustStorePassword="changeit"
(info) On my local instance trustStore password is changeit so I belive, if you didn′t changed it, your is changeit as well.
tomcat、junit運行時會從默認路徑載入cacerts文件,如果main函數直接運行需要指定javax.net.ssl.trustStore文件路徑,比如:
java -Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts -jar XXX.jar
注意JAVA_HOME設置中如果有空格,會java執行錯誤,可以把環境變數JAVA_HOME中C:\Program Files縮寫為C:\Progra~1
㈥ 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;
}
}