2012-08-27 2 views
3

X509Certificate2 인스턴스에서 AuthorityKeyIdentifier 확장을 추출하는 방법을 찾고 있습니다. 나는 내장 된 지원을 보지 못했지만 윈도우는 인증서 체인을 제대로 만들 수 있기 때문에 어떤 수준의 기능이 있어야한다는 것을 알고 있습니다. 대답이 DER 파서를 굴릴 것이라면 참조 할 수있는 좋은 구현이 있습니까?.NET의 X509Certificate2에서 AuthorityKeyIdentifier를 추출하는 방법

답변

8

X509Certificate2.Extensions 등록 정보에서 확장을 반복하고 OID가 2.5.29.35 인 확장자 (http://www.alvestrand.no/objectid/2.5.29.35.html)를 찾으십시오. 이것이 AuthorityKeyIdentifier 확장입니다.

[편집 :. 다음 추가]

확장 속성의 각 구성원은 코딩되는 ASN이다. 그래서 당신은 사람이 읽을 수 또는 기계 분석 할 수있는 형식으로 얻을 수있는 다음과 같은 작업을 수행 할 수 있습니다

using System.Security.Cryptography; 
using System.Security.Cryptography.X509Certificates; 

... 

X509Extension extension; // The OID 2.5.29.35 extension 
AsnEncodedData asndata = new AsnEncodedData(extension.Oid, extension.RawData); 
Console.WriteLine(asndata.Format(true)); 

을 마이크로 소프트 중간 CA 인증서 중 하나를 들어, 형식() 메소드는 다음 반환

[1]Authority Info Access 
    Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2) 
    Alternative Name: 
      URL=http://www.microsoft.com/pki/certs/MicrosoftRootCert.crt 

구문 분석은 확실히 쉽지는 않지만 정규 표현식 \[\d+\]Authority Info Access으로 시작하는 줄을 찾아 일반 표현식 URL=(.+) (8 개의 공백이 서식에서 불분명 함)으로 그 아래에 한 줄을 찾고 괄호로 묶은 그룹의 URL을 사용할 수 있습니다 .

+0

흥미롭게도 충분히 [Microsoft] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa379070(v=vs.85) .aspx) OID는 2.5.29.1이지만, rfc5280] (http://www.ietf.org/rfc/rfc5280.txt)는 최종 세그먼트가 35임을 동의합니다. 어떤 경우에도 결과는 옥텟 문자열이며 인코딩 된 값을 추출하려고합니다. – Tedford

+0

확장 기능을 사람이 읽을 수있는 것으로 추출하는 방법과 약간의 노력으로 컴퓨터를 구문 분석 할 수있는 방법을 보여줍니다. – akton

+0

2.5.29.1은 * old * OID입니다. http://www.alvestrand.no/objectid/2.5.29.1.html –

0

더 쉬운 옵션을 사용할 수 있습니다. 인증서 처리의 유연성을 높이는 기존 구성 요소를 사용하십시오. BouncyCastle 또는 SecureBlackbox을 사용할 수 있습니다.

+0

동의; 그러나 제약으로 인해 오픈 소스 소프트웨어를 포함 할 수 없습니다. 따라서 내장 지원이나 사내 개발 솔루션의 필요성. – Tedford

+0

@Tedford 상업적 (우리)은 어떨까요? :) 진지하게, DER 파서는 제 3 자도 될 것이며, (저급 성격으로 인해) 고수준 인증서 관리 클래스보다 임베딩 및 처리하기가 더 어렵습니다. –

+0

슬프게도, 우리는 출시주기의 시점에서 추가 자본 지출을 할 수 없습니다. 아마도 미래 버전에서 가능할 것입니다. – Tedford