導航:首頁 > 證書轉讓 > x509證書解析

x509證書解析

發布時間:2021-11-14 20:43:20

A. java如何解讀證書里的內容(通過string 來生成X509Certificate對象)

那個字元串是Base64編碼後的

試著把String 轉成inputStream,

InputStream inStream = new ByteArrayInputStream(caString.getBytes('UTF-8'));用這句替代 上面寫的第二行代碼。但是在執行第四行的時候報錯。。

java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Unsupported encoding

B. openssl,x509,crt,cer,key,csr,ssl,tls 這些都是什麼鬼

OpenSSL:是一個抄安全套接字層密碼庫襲。
X.509:是一種非常通用的證書格式。
crt (證書文件):客戶端認證的證書。
CER 編輯 CER有兩層意思:用於存儲公鑰證書的文件格式。
key:SSL證書鑰匙(證書密鑰)
csr:證書SSL證書前提文件(審批請求文件,裡麵包括域名、聯系人信息 )
ssl:是為網路通信提供安全及數據完整性的一種安全協議(常見SSL證書用於HTTPS)
TLS:安全傳輸層協議(TLS)用於在兩個通信應用程序之間提供保密性和數據完整性。

總結:以上是用於SSL證書加密的專業格式文件。

C. 【openssl編程】x509證書解析問題

內存錯誤原因不明,調用其他函數有時候也會出現類似錯誤,X509結構體符合ASN1編碼規則,其定義在asn1.h中有說明,可以利用其結構體自己寫函數,注意部分可以調用i2a_ASN1_...函數解析,但我調用有時候也會報內存錯誤

D. 如何使用openssl 讀取 x509證

用php的openssl_x509_parse函數解析用戶證書user.cer和根證書server.cer ,在比較用戶證書與根證書的頒發機構等信息,如果是相同的則說明用戶證書是根證書頒發,即為合法證書,反之則不合法生成證書成功,但打開myCer.crt證書讀取時,執行到d2i_X509(&x,(const unsigned char)&buf,len) 時,返回空。不加下面這幾行,就提示uplink錯誤,加了以後x值為0:extern "C"{#undef APPMACROS_ONLY#include

E. x509的詳細特徵

所有的X.509證書包含以下數據:1、X.509版本號:指出該證書使用了哪種版本的X.509標准,版本號會影響證書中的一些特定信息。目前的版本是3。
2、證書持有人的公鑰:包括證書持有人的公鑰、演算法(指明密鑰屬於哪種密碼系統)的標識符和其他相關的密鑰參數。
3、證書的序列號:由CA給予每一個證書分配的唯一的數字型編號,當證書被取消時,實際上是將此證書序列號放入由CA簽發的CRL(Certificate Revocation List證書作廢表,或證書黑名單表)中。這也是序列號唯一的原因。
4、主題信息:證書持有人唯一的標識符(或稱DN-distinguished name)這個名字在 Internet上應該是唯一的。DN由許多部分組成,看起來象這樣:
CN=Bob Allen, OU=Total Network Security Division
O=Network Associates, Inc.
C=US
這些信息指出該科目的通用名、組織單位、組織和國家或者證書持有人的姓名、服務處所等信息。
5、證書的有效期:證書起始日期和時間以及終止日期和時間;指明證書在這兩個時間內有效。
6、認證機構:證書發布者,是簽發該證書的實體唯一的CA的X.509名字。使用該證書意味著信任簽發證書的實體。(注意:在某些情況下,比如根或頂級CA證書,發布者自己簽發證書)
7、發布者的數字簽名:這是使用發布者私鑰生成的簽名,以確保這個證書在發放之後沒有被撰改過。
8、簽名演算法標識符:用來指定CA簽署證書時所使用的簽名演算法。演算法標識符用來指定CA簽發證書時所使用的公開密鑰演算法和HASH演算法。
X.509證書格式
為了利用公共密鑰這種密碼系統,必須將公共密鑰分發出去。最通用的一種簽名證書格式被稱為X.509格式。X.509格式的證書被VeriSign、微軟、網景和其他許多公司廣泛應用於對電子郵件消息進行簽名,對程序代碼進行認證,以及對許多其他類型的數據進行認證等等。X.509標準是由國際電話標准機構,即國際電報電話咨詢委員會(CCITT)提出的用於目錄服務的X.500系列建議的組成部分。
X.509證書的具體結構是用一種形式化表示來描述的,稱為抽象語法表示法#1(abstract syntax notation)即ASN.1。圖9-13顯示了第三版X.509格式的ASN.1定義。雖然具體的語法對我們並不重要,但是你可以看到,ASN.1為證書文件的結構給出了精確的定義。基本編碼規則(basic encoding rules),即BER,精確地描述了如何將該結構保存為二進制文件。也就是說,BER描述了如何對整數、字元串、位串以及諸如SEQUENCE、CHOICE和OPTIONAL的結構進行編碼的方法。 [Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version must be v2or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version must be v2or v3
extensions [3] EXPLICIT Extensions OPTIONAL
-- If present, version must be v3
}
Version ::= INTEGER {
v1(0), v2(1), v3(2)
}
CertificateSerialNumber ::= INTEGER
Validity ::= SEQUENCE {
notBefore CertificateValidityDate,
notAfter CertificateValidityDate
}
CertificateValidityDate ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime
}
UniqueIdentifier ::= BIT STRING
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING
}
Extensions ::= SEQUENCE OF Extension
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
} 解析X509證書
1.從磁碟上的證書文件中讀取證書數據
unsigned char* pbX509Data; // 證書數據
unsigned long ulX509DataLen; // 證書數據長度
2.獲取CertContext
PCCERT_CONTEXT pCertContext = CertCreateCertificateContext(X509_ASN_ENCODING, pbX509Data, ulX509DataLen);
3.獲取證書信息
pCertContext->pCertInfo->dwVersion; // 證書版本號
CRYPT_INTEGER_BLOB snBlob = pCertContext->pCertInfo->SerialNumber; // 證書SN
CERT_NAME_BLOB issuerBlob = pCertContext->pCertInfo->Issuer; // 證書頒發者
CERT_NAME_BLOB subjectBlob = pCertContext->pCertInfo->Subject; // 證書主題
// 證書有效起始日期
SYSTEMTIME sysTime;
memset(&sysTime, 0, sizeof(sysTime));
FileTimeToSystemTime(&pCertContext->pCertInfo->NotBefore, &sysTime);
char szTime[128] = {0};
sprintf_s(szTime, 128, %d年%d月%d日 %d:%d:%d, sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
// 證書有效終止日期
memset(&sysTime, 0, sizeof(sysTime));
FileTimeToSystemTime(&pCertContext->pCertInfo->NotAfter, &sysTime);
memset(szTime, 0, sizeof(szTime));
sprintf_s(szTime, 128, %d年%d月%d日 %d:%d:%d, sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
4.創建臨時密鑰容器
HCRYPTPROV hTmpProv = NULL;
CryptAcquireContext(&hTmpProv, My_Temporary_Container, NULL, PROV_RSA_AES, 0); // NULL表示使用系統默認CSP
5.向容器中導入公鑰,獲取公鑰句柄
HCRYPTKEY hKey = NULL;
CERT_PUBLIC_KEY_INFO certPubKeyInfo = pCertContext->pCertInfo->SubjectPublicKeyInfo;
CryptImportPublicKeyInfo(hTmpProv, X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, &certPubKeyInfo, &hKey);
6.導出公鑰(最好採用二次調用方式)
unsigned char* pBuf = NULL;
unsigned long ulBufLen = 0;
CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, pBuf, &ulBufLen);
pBuf = new unsigned char[ulBufLen];
memset(pBuf, 0, ulBufLen);
CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, pBuf, &ulBufLen);
7.獲取公鑰信息
unsigned char* p = pBuf + sizeof(PUBLICKEYSTRUC);
(*(RSAPUBKEY*)p).bitlen; // 公鑰模長(以bit為單位)
(*(RSAPUBKEY*)p).pubexp; // 公鑰的e(注意位元組順序)
p += sizeof(RSAPUBKEY); // 公鑰的n(注意位元組順序)
8.清理工作
delete[] pBuf;
pBuf = NULL;
CryptDestroyKey(hKey);
CryptReleaseContext(hTmpProv, 0);
CertFreeCertificateContext(pCertContext);

F. 什麼是X509格式的證書在java中能否使用X509Certificate對象獲得證書的私鑰信息

證書里怎麼可能有私鑰嘛,異想天開

G. java如何解讀證書里的內容(通過string 來生成X509Certificate對象)

那個字元串是Base64編碼後的

試著把String 轉成inputStream,

InputStream inStream = new ByteArrayInputStream(caString.getBytes('UTF-8'));用這句替代 上面寫的第二行代碼。但是在執行版第四行的權時候報錯。。

java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Unsupported encoding

H. 如何獲取數字證書(x509Certificate)中的指紋演算法

創建X509證書方法較多,在Windows 環境下大致總結了幾中辦法,
1) 通過CA獲取證書,
2) 通過微軟提供的makecert 工具得到測試證書
3) 編程的方法創建,.Net提供了 X509Certificate2 類,該類可以用於創建證書,但只能從RawData中創建,創建後無法修改除FriendlyName以外的任何屬性。

我在互聯網上找了很久,始終沒有找到完全通過程序創建自定義的證書的方法。後來想了一個折中辦法,就是用程序調用 makecert.exe 先生成一個證書,證書的一些參數如Subject,有效期,序列號等可以通過參數傳入,然後把生成的證書文件讀到Rawdata中,得到X509Certificate2 類型的證書對象。當然這種方法確實比較笨,必須要依賴外部進程。等後面有時間的話,我還是想按照X509 V3 標准,自己創建RawData,然後生成證書,這樣應該是比較靈活的做法。不知道網友們有沒有什麼更好的方法來創建一個自定義的證書。

通過 makecert.exe 創建X509證書的代碼如下,供大家參考

static object semObj = new object();

/// <summary>
/// 自定義的證書信息
/// </summary>
public class T_CertInfo
{
public String FriendlyName;
public String Subject;
public DateTime BeginDate;
public DateTime EndDate;
public int SerialNumber;
}

/// <summary>
/// 生成X509證書
/// </summary>
/// <param name="makecrtPath">makecert進程的目錄</param>
/// <param name="crtPath">證書文件臨時目錄</param>
/// <param name="certInfo">證書信息</param>
/// <returns></returns>
public static X509Certificate2 CreateCertificate(String makecrtPath, String crtPath,
T_CertInfo certInfo)
{
Debug.Assert(certInfo != null);
Debug.Assert(certInfo.Subject != null);

string MakeCert = makecrtPath + "makecert.exe";
string fileName = crtPath + "cer";

string userName = Guid.NewGuid().ToString();

StringBuilder arguments = new StringBuilder();

arguments.AppendFormat("-r -n \"{0}\" -ss my -sr currentuser -sky exchange ",
certInfo.Subject);

if (certInfo.SerialNumber > 0)
{
arguments.AppendFormat("-# {0} ", certInfo.SerialNumber);
}

arguments.AppendFormat("-b {0} ", certInfo.BeginDate.ToString(@"MM\/dd\/yyyy"));
arguments.AppendFormat("-e {0} ", certInfo.EndDate.ToString(@"MM\/dd\/yyyy"));
arguments.AppendFormat("\"{0}\"", fileName);

I. 如何將證書字元串轉換為X509結構

(1)Openssl生成公私鑰
使用Openssl是為了生成公鑰和私鑰對,用於外部商戶系統和xxx系統之間報文的安全性驗證。如果使用者不需要生成公私鑰,而是直接對報文進行處理,則參考第四部分,計算摘要及簽名值。
1. 安裝openssl步驟直接點擊exe文件。出現需要安裝vs2008插件的,直接忽略。

2. 在安裝過程中找到OpenSSL相應的安裝目錄,進入bin目錄下找到openssl.exe可執行文件,點擊運行。然後分別按順序輸入如下命令:
a. genrsa –out private-rsa.key 1024
說明:該命令是生成一個沒有加密的私鑰
genrsa 生成私鑰文件,私鑰存儲在private-rsa.key中,長度為1024。out後面指定輸出文件名。
private-rsa.key 為生成的私鑰文件,但該文件必須經過處理得到私鑰。

b. req –new –x509 –key private-rsa.key –days 750 –outpublic-rsa.cer
說明:根據private-rsa.key生成證書public-rsa.cer
-new 表示新的請求
-509 表示輸出的證書結構
750表示證書有效天數
-out public-rsa.cer -out後面表示公鑰證書,用於驗證數字簽名,此公鑰證書或者公鑰需要提前發送給需要驗證本單位或部門數據的接收方。

c. pkcs12 –export –name test-alias –in public-rsa.cer–inkey private-rsa.key –out 99bill-rsa.pfx
說明:生成PKCS12 格式Keystore
密碼前後輸入要一致,這個密碼在用Keystore生成公私鑰過程中會用到。
Public-rsa.cer, private-rsa.key是之前生成的。

附1:
下述代碼是從99bill-rsa.pfx中獲取私鑰的Java版本代碼。因為private-rsa.key中生成的私鑰無法直接使用,必須進行一定的處理。
代碼有幾個注意點:
文件流初始化路徑需要根據自己的實際路徑來填寫。
密碼是在第二節中c步驟中的密碼,本實例輸入的是suning。
KeyStorekeyStore = KeyStore.getInstance("PKCS12");
= newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx");
char[]nPassword = "suning".toCharArray();
StringkeyAlias = null;
keyStore.load(fileInputStream,nPassword);
fileInputStream.close();
System.out.println("keystoretype=" + keyStore.getType());
Enumerationenumeration = keyStore.aliases();
if(enumeration.hasMoreElements())
{
keyAlias = (String) enumeration.nextElement();
System.out.println("alias=[" + keyAlias +"]");
}
System.out.println("iskey entry=" + keyStore.isKeyEntry(keyAlias));
PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword);
//私鑰轉成字元串
StringprivateStr = Base64.encodeBase64String(prikey.getEncoded()).trim();
//生成公鑰字元串,還可以通過cer證書生成
Certificatecert = keyStore.getCertificate(keyAlias);
PublicKeypubkey = cert.getPublicKey();
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
注意:
1. 所用類的說明:
Base64:
import org.apache.commons.net.util.Base64;
Certificate:
import java.security.cert.Certificate;
2. 在openssl生成公私鑰過程中,用戶輸入了密碼。本例中密碼為suning。

1. 摘要及生成方法
摘要的生成過程(digest方法全部實現了下述3個過程):
1. 根據key對傳來的map數據排序;
2. 生成a1=b1&a2=b2&a3=b3形式的字元串,排除某些字元串Key值;
3. 調用digest方法進行md5編碼;
以上三步均通過Digest.digest()方法實現:
String digest = Digest.digest(Map map, String... keys);
傳遞的http報文體body內容如a1=b1&a2=b2&a3=b3形式的字元串,提取出需要加簽的字元串並轉成map形式。execludeKes是要排除的欄位,是一個字元串數組。
計算摘要這一步很關鍵,因為選取的欄位要求發送方和接收方必須一致,即發送方對哪些欄位計算摘要,那麼同樣地接收方也必須對相同的欄位計算摘要,否則會報6601的錯誤。
說明:a. Map是存儲了計算摘要的欄位
b. keys表示排除的欄位,不能用於計算摘要的欄位,如signature,signAlgorithm
2. 公鑰證書及字元串轉換方法
轉換的目的:便於存儲。(商戶直接提供公鑰證書也可以,但是對於向驗簽系統提供公鑰字元串的商戶,需要用下述代碼把公鑰轉成字元串)
1. 公鑰/私鑰字元串轉成公鑰/私鑰,主要是把字元串轉成公鑰PublicKey
X509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey));
KeyFactorykeyFactory = KeyFactory.getInstance(RSA);
PublicKeypubKey = keyFactory.generatePublic(pubKeySpec);
2. 公鑰或私鑰轉成Base64字元串:
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
3. 公私鑰驗證方法
驗證目的:公私鑰生成之後,需要驗證是否匹配。(之前許多商戶生成公私鑰混亂,無法確定公私鑰是否匹配就添加到驗簽系統中)。此代碼由用戶自己用junit驗證運行。驗證公私鑰生成是否正確,如果result為true,則說明公私鑰生成正確;否則生成的公私鑰有問題,不能使用。
String prik1 ="";
String pubb ="";
String data ="wkk";
String digest =Digest.digest(data);
PrivateKey privateKey =RSAUtil.getPrivateKey(prik1);
String sign =RSAUtil.sign(digest, privateKey);
boolean result =RSAUtil.vertiy(digest, sign,
RSAUtil.getPublicKey(pubb));
System.out.println(result);

J. x509 證書解析

http://blog.csdn.net/tsh185/article/details/8600079
這個參來考下自,不知是否對你有幫助

閱讀全文

與x509證書解析相關的資料

熱點內容
馬鞍山學化妝 瀏覽:41
膠州工商局姜志剛 瀏覽:786
了解到的發明創造的事例 瀏覽:391
2012年中國知識產權發展狀況 瀏覽:773
合肥徽之皇知識產權代理有限公司 瀏覽:636
天津企興知識產權待遇 瀏覽:31
二項基本公共衛生服務項目試題 瀏覽:305
基本公共衛生服務考核標准 瀏覽:543
公共衛生服務考核評估辦法 瀏覽:677
上海工商局咨詢熱線 瀏覽:177
馬鞍山二中葉張平 瀏覽:214
機動車交通事故責任糾紛被告代理詞 瀏覽:603
醫院固定資產折舊年限 瀏覽:702
商標注冊網先咨政岳知識產權放心 瀏覽:658
公眾號版權投訴材料 瀏覽:841
簽訂無固定期限合同的好處 瀏覽:727
油汀發明 瀏覽:216
論文轉讓網 瀏覽:282
通州門面轉讓最新消息 瀏覽:165
第二屆紫金知識產權國際峰會 瀏覽:4