2012-07-10 8 views
3

Bouncy Castle과 .Net 프레임 워크의 조합을 사용하여 X509 인증서를 만드는 asp.net 4.0 프로젝트가 있습니다.Asp.Net CertEnroll CX509CertificateRequestPkcs10 예외

그것은 내 W7 dev에 기계에서 제대로 실행되지만 W2008에 설치된 (32 비트,하지 R2)이 코드 비트 : 처음에 내가 생각

Unable to cast COM object of type 'System.__ComObject' to interface type 'CERTENROLLLib.CX509CertificateRequestPkcs10'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{728AB35B-217D-11DA-B2A4-000E7BBB2B09}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

:

CX509CertificateRequestPkcs10 csr = new CX509CertificateRequestPkcs10(); 

이 예외를 throw COM은 32 비트와 호환되지만 서버는 32 비트이므로 64 비트 서버 문제 일 수 있습니다.

응용 프로그램은 Framework 4.0을 사용하여 구축되었으며 할당 된 IIS AppPool은 "네트워크 서비스"의 ID로 4.0, 통합 모드로 실행됩니다. 클라이언트 브라우저 (IE8 32) .

W2008-32 (표준)은 CERTENROLLLib을 기본 제공하지 않습니까? 아무도이 상황에서 행동하게하는 방법을 알고 있습니까?

의견을 보내 주셔서 감사합니다.

답변

4

CX509CertificateRequestPkcs10 개체를 인스턴스화 할 때 사용할 인터페이스 (ProgID 기준)를 명시 적으로 지정하십시오. Win2008 R2에서 Microsoft는 인터페이스를 덮어 썼습니다. 대신 :

사용
CX509CertificateRequestPkcs10 objPkcs10 = new CX509CertificateRequestPkcs10(); 

: 코드가 실행 시간이 새로운 인터페이스 GUID에 대해 정기적으로보고있다 Win2008 R2에 작성된 경우 Win2008 R2 마이크로 소프트에서 인터페이스를 덮어

IX509CertificateRequestPkcs10 objPkcs10 = (IX509CertificateRequestPkcs10)Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509CertificateRequestPkcs10")); 

때문에 Win2008 R2 인터페이스 GUID가 Win2008 인터페이스 GUID와 다르기 때문에 Win2008에서 찾을 수 없습니다.

개체를 만들 수 없으므로 예외가 발생합니다.

ProgID로 인터페이스에 액세스하면 문제가 해결됩니다.

참조 : TechNet Answer - W2008-32에서 Pkcs10 개체를 만들 때 R2가 이전의 "표준"인터페이스를 덮어 썼기 때문에 인터페이스 GUID를 지정해야합니다.

+0

솔루션을 포함하도록 답변을 업데이트했습니다. 나는 똑같은 문제가 있었고 당신의 해결책은 많은 시간을 절약 해주었습니다. 감사. – flayn

+0

2012R2에서 2016 년에 다시 발생 했습니까? 내 코드는 W10 x64 dev 시스템에서 완벽하게 작동하지만 2012R2 x64 웹 서버에서는 작동하지 않습니다. 지금은 그렇다! 정말 고맙습니다. – fero