iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0
自我挑戰組

在資訊宅中打滾的通訊系生系列 第 24

Day-24 APP檢測篇-公鑰憑證

前言

在做APP檢測的時候,會很常遇到需要去查看憑證簽發單位、時效、是否被吊銷等資訊,目前較廣為使用是X.509的公鑰憑證格式,小編因為這次做經濟部工業局的行動應用APP基本資安檢測,裡面就有提到很多項目需要看懂APP之連線伺服器的憑證,所以做了一點小研究。

欄位介紹

這次直接以 www.google.com 這一個網站的憑證來做介紹,搭配查詢憑證網站crt.sh來解釋。

www.google.com crt.sh

憑證層級

一個憑證會有一個簽屬單位而簽屬單位又有另外一個單位來背書,所以一個憑證可能會形成一個階層式的簽屬單位,由此憑證為例:
1. GlobalSign Root CA - R2 -> GlobalSign 簽屬給 GlobalSign
2. Google Internet Authority G3 -> GlobalSign 簽屬給 Google Internet Authority G3
3. www.google.com -> Google Internet Authority G3 簽屬給 www.google.com
![](https://i.imgur.com/RVemOXj.png)

X.509基本格式

Version: V3
  1. 版本(Version):目前最新版的為V3的版本。
SerialNumber: [0x191bdf1e6ef06e8e] or 1809284997122649742
  1. 序號(Serial Number):憑證簽屬者產生憑證時填寫的序號,由憑證簽屬者亂數產生,為獨一無二的序號。
Subject: CN=www.google.com, O=Google LLC, L=Mountain View, ST=California, C=US
  1. 主體(Subject):此憑證簽發給誰。
    1. 一般單位(commonName,CN):此憑證簽發給的單位。
    2. 組織(organizationName,O):此憑證簽發給的組織名稱。
    3. 地方名稱(localityName,L):此憑證簽發給的組織所在地,非必須。
    4. 州/省份名稱(stateOrProvinceName,ST):此憑證簽發給的組織所在地(州、省份)。
    5. 國家(countryName,C):此憑證簽發給的組織所在之國家。
Issuer: CN=Google Internet Authority G3, O=Google Trust Services, C=US
  1. 簽發者(Issuer):此憑證之簽屬者。
    1. 一般單位(commonName,CN):簽屬此憑證的單位。
    2. 組織(organizationName,O):簽屬此憑證的組織名稱。
    3. 國家(countryName,C):簽屬此憑證的組織所在之國家。
Validity: [From: Wed Oct 24 00:54:00 CST 2018, To: Wed Jan 16 00:54:00 CST 2019]
  1. 有效日期(Validity):此憑證簽屬時制定的憑證有效期限。
    1. 開始於(Not Before):此憑證生效日始於時間。
    2. 過期於(Not After):此憑證過期時間。
SHA-256:
C4:F5:F3:62:22:49:86:84:75:E2:3F:DE:83:95:AF:B2:CF:D8:D1:F4:B0:E2:B8:75:8F:B3:4D:BA:54:46:7F:AF
SHA1:
06:5F:BF:75:F3:48:F1:0B:20:F8:7D:36:3B:C5:66:88:AB:FD:61:AB
  1. 憑證指紋(fingerprint):此憑證的指紋碼(Hash值),通常會有SHA1 and SHA256。
Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11
  1. 簽章演算法(Signature Algorithm):實際上憑證是以OID來代表簽章演算法。ex:1.2.840.113549.1.1.11代表SHA256withRSA。參考連結
Key:  Sun EC public key, 256 bits
  public x coord: 66129113333684552632311594095715093834019296145676639254497698869735875526891
  public y coord: 37440775039548272185206459423500047827746025222185476888870719848668361795867
  parameters: secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)
  pub: 
    04:92:33:c0:73:2b:07:7e:ba:50:4d:27:46:dc:aa:
    ce:0a:f5:06:23:39:14:56:f3:c9:ec:6c:79:d5:0a:
    05:c0:eb:52:c6:ba:4a:a1:c8:7a:fd:ff:d1:bf:90:
    a0:73:dc:54:1b:4b:20:0e:77:cc:93:4b:cd:f3:52:
    8c:66:96:29:1b
  1. 公開金鑰(Public Key):此憑證之公開金鑰訊息。
    1. 公開金鑰演算法(Public Key Algorithm):EC = 橢圓曲線演算法(ECDSA) 256bits。
    2. 演算法之參數(parameters):橢圓曲線 prime256v1 (又稱 secp256r1, NIST P-256)。
    3. 備註: public x and y 只是橢圓曲線演算法的兩個參數。
    4. 公鑰內容(Signature):根據幾bits。
Signature Algorithm: sha256WithRSAEncryption
94 58 a7 06 8b b8 d0 a4 27 29 7b f6 a9 8a 71 6e 
dd 1a 6f b6 b5 c9 35 fb b7 f7 39 17 14 48 15 31 
1f 2d 50 92 a8 4d 1d e5 60 63 b5 bb 79 41 d8 d6 
ed f0 d1 90 f6 7f 2e 35 f9 a0 7b 04 4d 1b 3a 94 
40 f9 c2 f6 52 dc 3d ba 55 1d 10 65 55 11 9e f0 
95 12 54 e3 62 73 8d 64 06 77 37 b4 29 44 ce 73 
1c 42 bb 61 30 cf 10 92 a0 6a 79 38 12 a8 a1 3a 
89 e8 6c ef 49 e5 31 b2 28 47 04 2c 3d b2 15 b5 
43 bc 24 c3 60 3b 45 9b 57 64 6f 99 09 fd 73 96 
f8 3b b9 8a f3 04 b9 7d 1a 45 6d 8a ac bc f4 63 
79 7e 84 1d 52 dd f2 fa e1 60 8d 1c 66 7c 49 08 
f5 8a f4 cb c6 ed 6c 84 c7 53 1b 5e c1 7d 04 94 
39 f5 f9 b2 1a a1 d8 b2 bd 09 1b 25 10 91 b6 39 
cd 92 1e 67 d4 25 aa 8e 6b cf 09 2f 28 95 36 37 
7e 29 31 8e ff 56 8d 30 9c 06 a5 51 c7 d2 aa 91 
1d 14 cf 43 27 ec 82 50 b5 fe 27 cf fa dc aa 79 
  1. 憑證簽章值(Signature Algorithm):可以代表此憑證的值,以上的欄位皆由分析此值得來。

上一篇
Day-23 Python2基本語法 -4
下一篇
Day-25 Python2基本語法 -5
系列文
在資訊宅中打滾的通訊系生30

1 則留言

0
msn1939
iT邦新手 5 級 ‧ 2021-01-28 06:39:56

簽署,不是簽屬

我要留言

立即登入留言