2011-01-03 13 views
3

拡張スタックが追加された証明書署名要求があります。このリクエストに基づいて証明書を作成するときに、そのスタックにアクセスして最終証明書の作成に使用したいと考えています。M2CryptoのCSR拡張スタックへのアクセス

M2Crypto.X509.X509拡張機能にアクセスするためのヘルパーの数(get_extget_ext_at等)を有しているが、M2Crypto.X509.Requestのみ拡張機能を追加するための部材が、既に指定されたオブジェクトに関連付けられた内線番号を検査する方法はありませんを提供するように見えます。

ここに何か不足していますか?

+1

パッチはhttps://github.com/martinpaljak/M2Crypto/pull/25に提出され

def req_extensions(csrFilename): cmd = ('openssl req -text -noout -in %s' % csrFilename) output = subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT) output = re.sub(r': rsaEncryption', ':', output) output = re.sub(r'[0-9a-f]{2}:', '', output) return yaml.load(output) 

機能 – viraptor

答えて

2

あなたはそうです。

M2Cryptoの現在のバージョンでは、必要なOpenSSLインターフェイス(X509_REQ_get_extensions)が公開されていません。

ちょうどCの面で関与しているもののアイデアを与えるために:

X509_REQ *req = /* ... */; 
STACK_OF(X509_EXTENSION) *exts = X509_REQ_get_extensions(req); 
int count = sk_X509_EXTENSION_num(exts); 
int i; 
for (i = 0; i < count; ++i) { 
    X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i); 
    /* Do something with ext */ 
} 
sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); 

をM2Cryptoは、CコードをラップするためにSWIGを使用しているので、あなたが良いを持っている場合、新しいAPIを公開することは困難ではありませんCの背景。

2

他の人には、私と同じようなGoogleの検索でこの質問が見つかりました。

M2Cryptoのこの短所を克服した同様の問題に直面して、私はOpenSSLユーティリティを呼び出し、出力を解析してYAMLと似ているように見えました。少しクリーンアップ。誰もが必要とする場合に続いて...このため

csrExt = self.req_extensions('my.csr') 
keyUsage = (
    csrExt['Certificate Request']['Data']['Requested Extensions'] 
      ['X509v3 Key Usage']) 

SAN = (
    csrExt['Certificate Request']['Data']['Requested Extensions'] 
      ['X509v3 Subject Alternative Name']) 

など

+0

ここでは脆弱性を心配しています - 将来のバージョンのopensslコマンドラインツールでYAMLishnessが引き続き存在すると想定するのは危険です。 –

+0

私は完全に同意し、その選択肢があれば毎回APIを使用します。しかし、現時点でそのオプションが存在しないため、... – GraduateOfAcmeU

+1

古いスレッドを突き出すことは申し訳ありませんが、潜在的に信頼できないソースからYAMLを非直列化することはセキュリティリスクです。 'yaml.safe_load()'を使う方が良いでしょう。 – Fitblip

関連する問題