3

拡張スタックが追加された証明書署名要求があります。この要求に基づいて証明書を作成するときは、そのスタックにアクセスして、最終的な証明書の作成に使用できるようにしたいと思います。

ただし、拡張機能( 、など)にM2Crypto.X509.X509アクセスするためのヘルパーは多数ありますが、拡張機能を追加するためのメンバーのみを提供しているように見えますが、特定のオブジェクトに既に関連付けられている拡張機能を検査する方法はありません。get_extget_ext_atM2Crypto.X509.Request

ここで何かが足りませんか?

4

2 に答える 2

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はSWIGを使用してCコードをラップするため、Cのバックグラウンドが良好であれば、新しいAPIを公開することは難しくありません。

于 2011-01-04T00:48:33.827 に答える
2

私をここに連れてきたものと同様のグーグル検索を介してこの質問を見つけた他の人に。

同様の問題に直面し、M2Cryptoのこの欠点に対するパッチが見えないので、OpenSSLユーティリティを呼び出して出力を解析するという道をたどりました。これは、YAMLに十分似ているため、少しクリーンアップするだけで偽造できます。

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)

それで...

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'])

于 2014-03-06T21:27:48.937 に答える