Jimmy's blog

TCL, DOCSIS 測試筆記

Generate DOCSIS CVC

| Comments

Code Verification Certificate (CVC) 是 cable modem 作 secure software download (SSD) 時提供給 CM 驗證 image 用的憑證, 當 manufacturer 要出新的 software 時, 會用 private key 簽名, 並把含有相對應 public key 的 certificate (也就是 CVC) 丟給 CM 驗證, CM 先檢查 CVC, 確認 CVC 正確後就能用 CVC 裡面的 public key 檢查 software 的簽名是否正確, 利用這種方式來驗證 software 的可靠性與正確性

通常, 這個 private key 都會放在一個需要重重關卡才能進入的地方, 所以要測試 CM SSD 功能時會用 Test CVC, 製作 Test CVC 的步驟很簡單, 只要裝好 OpenSSL 就可以開始製作, CableLabs 有詳細的步驟說明

Cablelabs 下載 Test Certificates

Legacy PKI (DOCSIS 3.0 以前的版本)

1. 製作 csr_config.txt

csr_config.txt
1
2
3
4
5
6
7
8
9
10
11
12
[ req ]
default_keyfile = TEST_DOCSIS_MFR_CVC_PRIVATEKEY.pem
default_md = sha1
prompt = no
distinguished_name = req_DN

# Certificate Distinguished Name
[req_DN]
C = TW
O =  Jimmy Test
OU = DOCSIS
CN = TEST Code Verification Certificate

O 的值要和 CM 的 manufacturer’s organizationName 一致

2. 用以下指令產生 CSR 和 private key

bash
1
openssl req -newkey rsa:2048 -config csr_config.txt -out csr.pem -nodes

如果是要製作實際在用的 CVC, 作到這一步就可以了, 把 private key 保管好, csr 送給 CableLabs, 簽約, 繳費 CableLabs 就會處理接下來的事情, 若是要做 Test CVC 就繼續往下做

3. 製作 extension 欄位的設定檔 ext.txt

ext.txt
1
extendedKeyUsage = critical,codeSigning

4.用 Test DOCSIS Root Key 簽發憑證

bash
1
2
3
openssl x509 -req -days 3653 -in csr.pem -CA TEST_DOCSIS_CABLE_MODEM_ROOT_CA.PEM \
-CAkey TEST_DOCSIS_CABLE_MODEM_ROOT_CA_PrivateKey.PEM -CAcreateserial \
-extfile ext.txt -sha1 -out TEST_DOCSIS_MFR_CVC.crt

然後就能拿 TEST_DOCSIS_MFR_CVC.crt 和 TEST_DOCSIS_MFR_CVC_PRIVATEKEY.pem 去 sign image 了

New PKI (DOCSIS 3.1)

製作 DOCSIS 3.1 的 CVC 方法和 3.0 的差不多, 設定檔和 CA 換一下就可以了

1. 製作 csr_config.txt

csr_config.txt
1
2
3
4
5
6
7
8
9
10
11
12
[ req ]
default_keyfile = TEST_DOCSIS31_MFR_CVC_PRIVATEKEY.PEM
default_md = sha256
prompt = no
string_mask = nombstr
distinguished_name = req_DN

# Certificate Distinguished Name
[req_DN]
C = TW
O = Jimmy Test
CN = TEST Code Verification Certificate

3.1 的演算法變成 SHA-256

2. 產生 CSR 和 private key

bash
1
openssl req -newkey rsa:2048 -config csr_config.txt -out csr.pem -nodes

3.1 CVC RSA key length 變為 2048 bits

3. 製作 extension 欄位的設定檔 ext.txt

ext.txt
1
2
extendedKeyUsage=critical,codeSigning
authorityKeyIdentifier=keyid,issuer

3.1 CVC 多了 authorityKeyIdentifier 這個 extension, authorityKeyIdentifier 的值會是 CVC CA 的 subjectKeyIdentifier1

4. 用 Test DOCSIS CVC CA Key 簽發憑證

bash
1
2
3
openssl x509 -req -days 3653 -in csr.pem -CA TEST_CABLELABS_CVC_CERTIFICATION_AUTHORITY_PEM.CRT \
-CAkey TEST_CABLELABS_CVC_CERTIFICATION_AUTHORITY_PRIVATEKEY.PEM -CAcreateserial -extfile ext.txt \
-sha256 -out TEST_DOCSIS31_MFR_CVC_PEM.CRT

3.1 CVC 的 chain 多了一張 CVC CA, 不再是直接由 Root 簽發, 製作 signed image 時除了 CVC 和 private key 之外也要把 CVC CA 包進去

Comments