2011-01-03 4 views
3

확장 스택이 추가 된 인증서 서명 요청이 있습니다. 이 요청을 기반으로 인증서를 작성할 때 해당 스택에 액세스하여 최종 인증서를 만드는 데 사용할 수 있기를 원합니다. M2Crypto.X509.X509는 액세스 정보 (get_ext, get_ext_at 등) 헬퍼들을 갖는다 그러나 M2Crypto에서 CSR 확장 스택에 액세스

M2Crypto.X509.Request 만 정보를 추가하기위한 부재이지만 이미 주어진 개체와 관련된 정보를 검사하는 방법을 제공하는 것으로 보인다.

여기에 뭔가가 있습니까?

+1

사람이 필요 기능 – viraptor

답변

2

네 말이 맞아.

M2Crypto의 최신 버전은 필요한 OpenSSL 인터페이스 (X509_REQ_get_extensions)를 노출하지 않습니다. M2Crypto는 C 코드를 래핑하는 SWIG를 사용하기 때문에

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); 

, 당신이 좋은이있는 경우 새로운 API를 노출하기 어려울 안 :

그냥 C의 측면에 관여 무슨의 아이디어를 제공합니다 C 배경.

2

다른 사람들에게 비슷한 Google 검색을 통해이 질문을 찾았습니다.

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

이에 대한 패치가 경우에 https://github.com/martinpaljak/M2Crypto/pull/25에 제출

+0

여기서 취약성에 대해 걱정합니다. YAMLishness가 openssl 명령 줄 도구의 차후 버전에 계속 남아 있다고 가정하는 것이 위험합니다. –

+0

전적으로 동의하고 매번 API를 사용할 선택을 제공합니다. 그러나 그 옵션이 현재로서는 존재하지 않기 때문에 ... – GraduateOfAcmeU

+1

오래된 스레드를 찔끔 찔끔 마셔서 죄송하지만 잠재적으로 신뢰할 수없는 소스에서 YAML을 비 직렬화하는 것은 보안상의 위험이 있습니다. 'yaml.safe_load()'를 사용하는 것이 더 좋습니다. – Fitblip