Generating Test DOCSIS CVC




熟悉 OpenSSL 的操作後,製作 Test CVC 就很簡單了, 只要照著 spec 把值填進去就可以了
先紀錄最簡單的方法, 使用 DOCSIS 提供的 test root cert/key 製作 test cvc

第一步

CableLabs下載TEST DOCSIS 3.0 or Earlier Certificate Steps (Legacy PKI)

第二步

解壓縮, 按照 TEST_DOCSIS_MFR_CVC_STEPS.txt 的步驟,改一下 config, 打打指令就完成了

第零步

根據 CM-SP-SECv3.0-I13-100611.pdf 的 III.1.7 Code Verification Certificate Format, 編寫 config file, 製作 CVC


CM-SP-SECv3.0-I15-130808: Table III–2

X.509 Certificate Field Description
Certificate {
  tbsCertificate
    version v3(2)
    serialNumber Integer, size (1..20) octets
    signature SHA-1 with RSA, null parameters
    issuer
      countryName US
      organizationName Data Over Cable Service Interface Specifications
      organizationalUnitName Cable Modems
      commonName DOCSIS Cable Modem Root Certificate Authority
    validity
      notBefore utcTime (GMT), YYMMDDhhmmssZ
      notAfter utcTime (GMT), YYMMDDhhmmssZ
    subject
      countryName <country of subject company>
      organizationName <subject code-signing agent>
      organizationalUnitName DOCSIS
      commonName Code Verification Certificate
    subjectPublicKeyInfo
      algorithm RSA encryption, null parameters
      subjectPublicKey 1024-bit, 1536-bit, or 2048-bit modulus
    extensions
      extKeyUsage
        critical true
        keypurposeId id-kp-codeSigning
  signatureAlgorithm SHA-1 with RSA, null parameters
  signature Value
} end certificate

根據這個表格,就能了解 TEST_DOCSIS_MFR_CVC_STEPS.txt 裡的步驟為什麼要這麼做了

  1. 產生 private key + CSR
  2. 編輯 csr_config.txt
    [ req ]
    default_keyfile  = TEST_DOCSIS_MFR_CVC_PRIVATEKEY.pem  
    default_md      = sha1    
    prompt   = no     
    distinguished_name  = req_DN    
    string_mask   = nombstr
    # spec 裡有提到.issuer, subject 要用的編碼方式, 沒什麼特殊字元的話用 default 即可
    # The T.61/TeletexString type is used if the character string contains characters not in the PrintableString set.
    
    # Certificate Distinguished Name
    [req_DN]
    C  = <2 Digit Country Code>
    O  = <Company Name>
    # 這個值要和 modem 的 organizationName 一樣, 這是 CVC 檢驗的一個步驟
    OU  = DOCSIS
    CN  = TEST Code Verification Certificate
    
    然後就能用以下指令製作 key + CSR 了
    openssl req -newkey rsa:2048 -config csr_config.txt -out csr.pem -nodes
    
  3. 簽發憑證
  4. 編輯 extension 設定檔 ext.txt
    extendedKeyUsage=critical,codeSigning
    
    搭配 DOCSIS 的 Test Root CA Cert/Key, 再用以下指令簽發即可
    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
    

做完 CVC 後, 把 Test DOCSIS Root CA public key 塞到 modem, CVC 拿去 sign image, 就可以測 CVC upgrade了

1 則留言: