詳解從p12證書提取RSA公私鑰和序列號(小白向)

前言

在工作中我們或多或少會接觸對接外部系統(如微信支付寶),對接過程中又無可避免會對數據的加解密和加簽驗籤。一般第三方會提供一個授權證書,讓我們自行解密提取祕鑰。爲了讓你拿到證書後不會像我當初一樣一臉懵逼,咱們來看看如何從p12證書中提取公私鑰。

什麼是p12證書

p12證書圖示
我們常說的p12證書全稱是PKCS#12(Public-Key Cryptography Standards:公鑰加密標準)

百度百科:
PKCS#12是一種交換數字證書的加密標準,用來描述個人身份信息。如:用戶公鑰、私鑰、證書等。

p12證書包含了私鑰、公鑰並且有口令保護,在證書泄露後還有最後一道保障。沒有證書口令無法提取祕鑰。
對PKCS標準感興趣的小夥伴可以點我打開百度百科

p12證書提取祕鑰流程圖

祕鑰提取流程

提取流程詳解

1. 提取證書序列號

很多人會講“公鑰序列號”、“私鑰序列號”等字眼,這都是錯誤的概念,只有證書才存在序列號。
一個最簡單的辦法,在Windows系統下直接雙擊p12證書導入證書。在輸入密碼後看到如下提示表示證書導入成功。
證書導入成功
然後Win+R打開命令行輸入certmgr.msc打開
運行證書管理
按如下圖即可找到證書序列號,至此證書序列號獲取完畢。
在這裏插入圖片描述

2.提取原始祕鑰

我們利用OpenSSL命令提取

openssl pkcs12 -in 你的證書.p12 -nocerts -nodes -out rsa_origin.key

該祕鑰內容如下:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxB/LNFITHme/a
此處省略N行
+naXDzKULrHVPtBYQkcGneZx2A2DLYBMupWI6EVw/anw9vLuhH8tVwuB77/1xQvf
4vngZlegOoSf2DQOcwU9z7A=
-----END PRIVATE KEY-----

提示輸入證書口令後可得到原始祕鑰rsa_origin.key,但僅有該祕鑰是沒用的,必須再從其中提取出公鑰和私鑰。

3.從原始祕鑰提取RSA私鑰

同樣,利用OpenSSL命令提取RSA私鑰

openssl rsa -in rsa_origin.key -out rsa_pkcs1.pem

提取出私鑰rsa_pkcs1.pem內容如下:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAsQfyzRSEx5nv2pM/Lv0FXvohs+mSnzSOhK5C44PMXoGsAGmT
此處省略N行
cEYdpIoL/QDF5zz7lFDSOvryep+g1Pp2lw8ylC6x1T7QWEJHBp3mcdgNgy2ATLqV
iOhFcP2p8Pby7oR/LVcLge+/9cUL3+L54GZXoDqEn9g0DnMFPc+w
-----END RSA PRIVATE KEY-----

此處注意,該祕鑰爲PKCS#1格式,在PHP下可直接使用,若爲java環境,我們一般需要使用PKCS#8格式私鑰,那麼再來做一次轉換。

openssl pkcs8 -topk8 -inform PEM -in rsa_pkcs1.pem -outform PEM -out rsa_private_pkcs8.pem -nocrypt

通過該命令我們得到java下可用的RSA私鑰

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxB/LNFITHme/a
此處省略N行
+naXDzKULrHVPtBYQkcGneZx2A2DLYBMupWI6EVw/anw9vLuhH8tVwuB77/1xQvf
4vngZlegOoSf2DQOcwU9z7A=
-----END PRIVATE KEY-----

至此RSA私鑰提取完畢。

4.從原始祕鑰提取RSA公鑰
openssl rsa -in rsa_origin.key -pubout -out rsa_public_key.pem

以上命令可提取出RSA公鑰。
提示:RSA公鑰不存在格式問題,可以直接使用。

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsQfyzRSEx5nv2pM/Lv0F
此處省略N行
vucXimGLR2AS6yooZg3dcELsQmQ9tsoPdKB0IlGpZwp/XPf5Gxwia/WHJzS9PMjb
bQIDAQAB
-----END PUBLIC KEY-----

至此RSA公鑰提取完畢。

驗證祕鑰提取結果

我們可以使用在線RSA加解密工具,輸入我們提取出的RSA公鑰和私鑰,在下方輸入任何字符後點公鑰加密,然後將密文覆蓋到原文,點擊私鑰解密。若能得到原文說明RSA公私鑰正確無誤。
在線RSA公私鑰加解密

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章