2013-02-20 45 views
6

का उपयोग कर स्वयं हस्ताक्षरित प्रमाणपत्र बनाते हुए मैं pyopenssl का उपयोग कर एक स्वयं हस्ताक्षरित X509v3 CA प्रमाणपत्र उत्पन्न करने का प्रयास कर रहा हूं। मैं विषय कुंजी पहचानकर्ता (SKID) युक्त कीड के साथ एक्सटेंशन प्राधिकरण कुंजी पहचानकर्ता (AKID) जोड़ना चाहता हूं। लेकिन मेरा निम्नलिखित कोड ब्लॉक SKID को AKID में कॉपी नहीं करता है बल्कि अपवाद फेंकता है। कृपया मुझे इस मुद्दे के समाधान में मदद :) कोड के रूप मेंpyopenssl

import OpenSSL 

key = OpenSSL.crypto.PKey() 
key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048) 

ca = OpenSSL.crypto.X509() 
ca.set_version(2) 
ca.set_serial_number(1) 
ca.get_subject().CN = "ca.example.com" 
ca.gmtime_adj_notBefore(0) 
ca.gmtime_adj_notAfter(24 * 60 * 60) 
ca.set_issuer(ca.get_subject()) 
ca.set_pubkey(key) 
ca.add_extensions([ 
    OpenSSL.crypto.X509Extension("basicConstraints", True, 
           "CA:TRUE, pathlen:0"), 
    OpenSSL.crypto.X509Extension("keyUsage", True, 
           "keyCertSign, cRLSign"), 
    OpenSSL.crypto.X509Extension("subjectKeyIdentifier", False, "hash", 
           subject=ca), 
    OpenSSL.crypto.X509Extension("authorityKeyIdentifier", False, "keyid:always",issuer=ca) 
    ]) 
ca.sign(key, "sha1") 
open("MyCertificate.crt.bin", "wb").write(
      OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, ca)) 
इस प्रकार है

अपवाद उत्पन्न करता है, तो मैं "हमेशा" में लाइन Keyid पैरामीटर से हटाने के रूप में

Traceback (most recent call last): 
    File "C:\Documents and Settings\Administrator\Desktop\Certificate\certi.py", line 21, in <module> 
    OpenSSL.crypto.X509Extension("authorityKeyIdentifier", False, "keyid:always",issuer=ca) 
Error: [('X509 V3 routines', 'V2I_AUTHORITY_KEYID', 'unable to get issuer keyid'), ('X509 V3 routines', 'X509V3_EXT_nconf', 'error in extension')] 

इस प्रकार अब है कोड

OpenSSL.crypto.X509 एक्सटेंशन ("प्राधिकरणकेइडिएंटिफायर", झूठी, "Keyid", जारीकर्ता = सीए)

मैं मिल AKID Keyid फ़ील्ड को रिक्त होना करने के लिए और नीचे के रूप में

  00:84:13:70:73:fe:29:61:5f:33:7d:b3:74:97:3b: 
      3a:f3:11:01:7c:b8:37:a8:8c:72:81:ee:92:fd:91: 
      8a:11:b3:b3:02:b4:97:d5:f8:1b:91:54:7e:15:49: 
      26:6d 
     Exponent: 65537 (0x10001) 
X509v3 extensions: 
    X509v3 Basic Constraints: critical 
     CA:TRUE, pathlen:0 
    X509v3 Key Usage: critical 
     Certificate Sign, CRL Sign 
    X509v3 Subject Key Identifier: 
     CE:D1:31:DE:CF:E3:E2:BC:6C:73:3D:55:F0:88:53:0A:F1:DC:31:14 
    X509v3 Authority Key Identifier: 
     0. 
Signature Algorithm: sha1WithRSAEncryption 
    0b:7b:28:f6:b9:1e:6e:ec:53:6a:c5:77:db:c5:3f:5e:1d:ab: 
    e5:43:73:eb:52:24:af:39:2b:aa:a3:f6:34:e1:92:4b:3b:5e: 
    b6:1 

अग्रिम में यू धन्यवाद दिखाए यह स्किड शामिल नहीं है।

उत्तर

7

इसका मतलब है कि आपके द्वारा उपयोग की जाने वाली सीए कुंजी में कोई विषय नहीं है IKEDentifier सेट।

अपने उदाहरण में आप ca के संदर्भ का उपयोग कर प्राधिकरण KeyIdentifier बना रहे हैं जिसमें अभी तक topicKeyIdentifier सेट नहीं है।

को आप अपने कोड एक को बदलते हैं:

ca.add_extensions([ 
    OpenSSL.crypto.X509Extension("basicConstraints", True, 
           "CA:TRUE, pathlen:0"), 
    OpenSSL.crypto.X509Extension("keyUsage", True, 
           "keyCertSign, cRLSign"), 
    OpenSSL.crypto.X509Extension("subjectKeyIdentifier", False, "hash", 
           subject=ca), 
    ]) 
ca.add_extensions([ 
    OpenSSL.crypto.X509Extension("authorityKeyIdentifier", False, "keyid:always",issuer=ca) 
    ]) 

तो यह काम करता है।