나는 X509Store
와 그의 친구들 X509Certificate2
과 X509Certificate2Collection
을 사용 해왔다. 모든 것은 괜찮 았지만 코드에 대한 테스트를 작성하기 시작했고 문제가 발생했습니다. 새 테스트 인증서를 생성하고 각 테스트를 시작하기 위해 설치 한 다음 끝에 테스트 인증서를 제거하십시오. 테스트 인증서는 생성 일이 과거에 만료되고 만료 날짜가 미래에도 발생 함에도 불구하고 비 결정 론적으로 유효하지 않습니다.X509Store를 올바르게 사용하는 방법은 무엇입니까?
전체 GC를 실행하고 TearDown에서 finalizers를 기다리는 것이 테스트를 수정한다는 것을 알았습니다.
여기에서 참조 소스를 파고 있습니다. X509Certificate2
을 삭제해야하는 것 같습니다. 그렇지 않으면 저장소에 추가하는 등 성공을 이미 반환 한 작업을 실제 저장소로 플러시 할 수 없습니다. Windows API의 동작은 CertCloseStore
CRYPT_E_PENDING_CLOSE
결과를 참조하십시오.
X509Certificate2Collection
은 기본적으로 단지 List<X509Certificate2>
인 것 같습니다. 따라서 이러한 인증서 목록이 생성 될 때마다 저장소의 Certificates
속성을 읽는 것처럼 모든 인스턴스를 삭제해야합니다. Find
방법을 사용하는 경우 또한
는이 임시 저장소를 만드는 인증서 표시를 추가하고 관리되지 않는 코드에서 다시 밖으로 다시 인증서 표시를 읽고, 도 모든해야 인증서 표시의 새 컬렉션을 만드는 작업이 포함됩니다 폐기.
실제로 이것은 X509Store
을 사용하는 올바른 방법입니까? .NET API가 사일런트 실패와 사방에 완전히 문서화되지 않은 실패 모드로 올바르게 사용하기에는 너무 위험하고 어렵 기 때문에 믿을 수없는 것처럼 보입니다. 나는 명백한 무언가를 놓치고 있는가, 아니면이 수업들을 모두 피해야 하는가?
[문서에 나와 있습니다.] (https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509store (v = vs.110) .aspx) :'Starting 이 유형은 .NET Framework 4.6에서 IDisposable 인터페이스를 구현합니다. 유형 사용이 끝나면 직접 또는 간접적으로 폐기해야합니다 .' –
'using '을 사용할 수 없습니까? – starmandeluxe