首頁 › 程式開發 › 憑證指紋擷取
🔧

憑證指紋擷取

讀取 .cer、.crt、.pem、.der、.p7b 憑證,算出 MD5/SHA-1/SHA-256 指紋、匯出 SPKI 公鑰並逐項解析有效期限與擴充

拖拽证书文件到此处,或点击选择
支持 .cer / .crt / .pem / .der 的 X.509 证书,可一次选多个文件
PEM 文本与 DER 二进制都能识别,证书链会逐张列出 · 全程在浏览器本地解析,文件不上传

工具介紹

拿到一張憑證,最常見的是兩個動作:確認它是不是你要的那一張(比對指紋),以及把公鑰交出去(匯出 PEM)。這兩件事原本一條指令就能做完,但手上沒有 openssl 環境、或者只是想快速看一眼的時候,直接拖檔案更省事。這個工具在瀏覽器裡讀取檔案位元組、自行解析 ASN.1 DER,憑證內容不會傳到任何伺服器。

能讀到什麼

  • 三種指紋、四種寫法:MD5、SHA-1、SHA-256 同時給出,可切換小寫無冒號、大寫無冒號、大寫冒號分隔、小寫冒號分隔,對照 openssl x509 -fingerprint 與 keytool -printcert 的輸出不必手動改格式
  • PEM 與 DER 都認:不靠副檔名判斷,先按文字尋找 -----BEGIN CERTIFICATE-----,找不到再按 DER 結構切段,所以 .cer、.crt、.der 混在一起拖進來也能讀
  • 多憑證檔案自動拆開:憑證鏈檔案與 PKCS#7(.p7b)裡的憑證會逐個列出並按檔案順序編號,點擊即可切換,鏈裡最後一個通常就是站台本身那張
  • 公鑰匯出:從 SPKI 段直接切出原始 DER 位元組,輸出 BEGIN PUBLIC KEY PEM、每 64 字元換行的 Base64、或單行 Base64 三種,公鑰與憑證指紋互不混淆
  • 憑證資訊逐項解析:版本號、序號、簽章演算法、主體與簽發者 DN(按 DER 順序逐個屬性列出)、生效與到期時間(換算為台北時間,同時給出剩餘天數與已過期提示)、公鑰演算法與位數(RSA 取模數實際位長,EC 給出曲線名),以及關鍵擴充的取值
  • 擴充解碼:BasicConstraints 的 CA 與 pathLen、KeyUsage 的九個位(附標準英文識別)、ExtendedKeyUsage、SubjectAltName 的 DNS 與 IP 條目、SubjectKeyIdentifier 與 AuthorityKeyIdentifier、CRL 發佈點;無法解讀的擴充給出名稱與位元組數,不假裝看懂
  • 指令對照區:把目前憑證的檔名填進範本,直接給出 openssl 與 keytool 的等效指令,本機複核時照抄即可
  • 不含私鑰的邊界:.p12、.pfx、.keystore、.jks 是含私鑰的金鑰庫,結構與公開憑證完全不同,工具會明確拒絕而不是硬解

使用情境

  • 上線前核對伺服器上的憑證檔案與備份裡的是不是同一張,比對 SHA-256 指紋比看檔名可靠
  • 瀏覽器裡看到的憑證疑似被替換,匯出伺服器檔案算一遍指紋,兩邊一致才排除中間人
  • 對接方要求提供公鑰用於驗簽,從憑證裡匯出 SPKI,而不是把整張憑證送出去
  • 驗證 RS256 簽章前,先用憑證公鑰替換 JWKS 裡的 n 與 e 手動比對
  • 看一張憑證能不能替別人簽發(CA:TRUE 加上 keyCertSign),判斷誤用中繼憑證的風險
  • 換證季盤點到期時間,剩餘天數直接寫在有效期限那一行
  • 收到一個只寫了 .pem 的檔案,先確認它到底是憑證、公鑰還是私鑰

指紋格式對照

寫法範例(SHA-1 片段)誰這樣輸出
大寫冒號分隔AA:1B:2C:...openssl -fingerprint、瀏覽器憑證檢視器
大寫無冒號AA1B2C...keytool 的 SHA1/MD5 行
小寫無冒號aa1b2c...程式裡做比對、寫進設定或工單備註
小寫冒號分隔aa:1b:2c:...部分 Windows 憑證匯出與封包擷取工具

常見問題

  • 指紋是對什麼算的?對整張憑證的 DER 編碼位元組做摘要,不是只對公鑰,也不是對 PEM 文字。同一段 DER 無論包成 PEM 還是保持 DER,指紋都一樣;一旦 PEM 裡的 Base64 被改動過一個字元,指紋必然對不上
  • MD5 指紋還能用嗎?作為「兩個檔案是不是同一張」的比對識別足夠,但 MD5 已不能用於抗偽造判斷,正式核驗請看 SHA-256
  • 為什麼提示「內容被截斷」?DER 的每個結構都自帶長度宣告,工具據此判斷。如果宣告有 1028 位元組而檔案只有 900 位元組,多半是複製貼上時少了尾部,或者下載中斷;這種憑證 openssl 同樣會報錯
  • 年份怎麼還原?X.509 的 UTCTime 只寫兩位年,依 RFC 5280 約定小於 50 記為 20xx、大於等於 50 記為 19xx;GeneralizedTime 寫四位年。帶時區位移的一律換算成台北時間顯示,避免差八小時的誤判
  • 匯出的公鑰能直接給別的程式用嗎?能。SPKI 段本身就是完整獨立的 DER 結構,包含演算法識別與公鑰位元串,多數語言與函式庫可直接讀取 BEGIN PUBLIC KEY
  • 拖進去提示不是憑證?工具會分辨內容類型:BEGIN PUBLIC KEY 是裸公鑰、BEGIN CERTIFICATE 才是憑證,兩者結構不同,讀錯類型的檔案不會硬湊出一個結果
  • 沒有 https 環境能用嗎?能。優先使用瀏覽器原生 WebCrypto 計算摘要,不可用時自動切到內建的純 JS MD5/SHA-1/SHA-256 實作,本機雙擊開啟網頁也能出結果
  • 憑證內容會上傳嗎?不會。檔案用 FileReader 讀進記憶體,ASN.1 解析與摘要計算全在瀏覽器裡完成,頁面不發送任何請求

只想算任意檔案的摘要見檔案 MD5 計算與雜湊計算器;把單行 Base64 公鑰還原成 PEM 或反過來可用 Base64 編解碼;核對有效期限起止時間戳用時間戳轉換;用憑證公鑰驗證簽章的令牌結構見 JWT 解析工具。