X509Certificate이 취소되면 프로그래밍 방식으로 어떻게받을 수 있습니까? 인증서가 철회되면 정보를 얻을 수 있지만 취소 된 시점을 알아야합니다. CRL 목록에 해당 정보가 있다고 생각하지만 누군가 그 정보를 읽는 방법을 말해 줄 수 있습니까?해지 된 X509Certificate
답변
취소 할 때 무효화 하시겠습니까? 취소 된 경우 웹 서버가 먼저 방해받지 않고 코드의 요청에 도달 할 것으로 기대하지 않습니다.
x509certificate에서 파생 된 x509certificate2를 사용하는 경우 확인할 수있는 더 많은 속성이 있습니다. 아래 링크에는 여러 가지 예가 나와 있습니다.
폐기 상태는 (a) CRL리스트를 획득하고 인증서가 표시되는지 확인하고, (b)이를 확인하는 서버에 OCSP 요청을 전송하여 확인한다.
.NET이 작업을 수행 할 수 없습니다. CryptoAPI에는 이러한 작업을위한 몇 가지 방법이 있지만 가장 쉬운 방법은 .NET 용 타사 라이브러리를 사용하는 것입니다. BouncyCastle은 OCSP 및 CRL을 일부 지원한다고 주장하며, SecureBlackbox는 OCSP 및 CRL에 대한 완벽한 지원 (클라이언트 및 서버 구성 요소 모두 사용 가능)을 제공하며, 전체 CRL 및 OCSP 확인 및 인증서 확인을 수행하는 구성 요소를 제공합니다. 필요한 경우 HTTP 및 LDAP 통신).
사용 x509.h 파일 용도에는 OpenSSL에서이 API 1.0/또는 버전
X509_CRL_get0_by_cert 상기 (X509_CRL CRL *, ** X509_REVOKED RET, 509 * X);
X 인증서를 확인하고 싶습니다.
Ret는 해지 구조의 주소이며 여기서 모두 해지 이유와 이유는 다음과 같습니다.
crl이 CRL입니다.
향후 독자를위한 설명입니다.
이미 말했듯이 .NET은 공개 클래스 나 X.509 인증서 해지 목록 또는 OCSP 메시징을 노출하지 않습니다. 물론 자신의 코드를 작성하거나 타사 라이브러리를 사용할 수 있습니다.
PowerShell PKI 모듈 프로젝트 (PKI.Core.dll 라이브러리)에서 내 확장 CryptoAPI 관리를 사용해 볼 수 있습니다. X509 CRL 관리 클래스 (CryptoAPI 기본 함수 위에 구축 됨)에 대한 지원이 있습니다 : X509CRL2 class. RevokedCertificates 속성에는 해지 된 인증서 배열이 저장됩니다. 또한 라이브러리에는 PKI.OCSP 네임 스페이스에 저장된 OCSP 메시징 클래스 (완전 관리)가 포함됩니다. 인증서에 AIA 확장에 OCSP 링크가 포함되어 있으면 OCSPRequest 개체를 인스턴스화하고 OCSPRequest.SendRequest 메서드를 호출하여 X509Certificate2 개체에서 OCSP 요청을 쉽게 만들 수 있습니다. 반환 객체는 OCSPResponse 클래스의 인스턴스입니다.
기본적으로, 코드는 다음과 같을 woul :
using System;
using System.Security.Cryptography.X509Certificates;
using PKI.OCSP;
public class Class1 {
public static DateTime? GetrevocationDate(X509Certificate2 cert) {
OCSPRequest request = new OCSPRequest(cert);
OCSPResponse response = request.SendRequest();
if (response.Responses[0].CertStatus == CertificateStatus.Revoked) {
return response.Responses[0].RevocationInfo.RevocationDate;
}
return null;
}
}
NULL은 인증서가 해지되지 않는다는 것을 의미합니다.CRL이를 X509Certificate 개체의 확장 속성의 OID로 저장됩니다
using System;
using System.Security.Cryptography.X509Certificates;
public class Class1 {
// crlRawData could a type of System.String and pass the path to a CRL file there.
public static DateTime? GetrevocationDate(X509Certificate2 cert, Byte[] crlRawData) {
X509CRL2 crl = new X509CRL2(crlRawData);
X509CRLEntry entry = crl.RevokedCertificates[cert.SerialNumber];
if (entry != null) {
return entry.RevocationDate;
}
return null;
}
}
에 설명 된대로 지원 채널을 사용하실 수 있습니다. X509CRL2를 사용하는 귀하의 방법은 챔피언처럼 일했습니다. 감사!! – JonK
: 코드가이 같이 보일 것이다 X509 CRL과
. OID FriendlyName 및 값은 'CRL 배포 지점'및 '2.5.29.31'입니다. OID가 2.5.29.31 인 인증서의 확장을 검색하면 원시 데이터를 구문 분석하고 배포 지점을 얻을 수 있습니다.
다음 코드 샘플은 here입니다. 필자는 공개적으로 서명 한 인증서와 내부 Microsoft 인증서를 모두 테스트했습니다. URL 또는 LDAP 연결 문자열을 반환합니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace System.Security.Cryptography.X509Certificates
{
public static class X509Certificate2Extensions
{
/// <summary>
/// Returns an array of CRL distribution points for X509Certificate2 object.
/// </summary>
/// <param name="certificate">X509Certificate2 object.</param>
/// <returns>Array of CRL distribution points.</returns>
public static string[] GetCrlDistributionPoints(this X509Certificate2 certificate)
{
X509Extension ext = certificate.Extensions.Cast<X509Extension>().FirstOrDefault(
e => e.Oid.Value == "2.5.29.31");
if (ext == null || ext.RawData == null || ext.RawData.Length < 11)
return EmptyStrings;
int prev = -2;
List<string> items = new List<string>();
while (prev != -1 && ext.RawData.Length > prev + 1)
{
int next = IndexOf(ext.RawData, 0x86, prev == -2 ? 8 : prev + 1);
if (next == -1)
{
if (prev >= 0)
{
string item = Encoding.UTF8.GetString(ext.RawData, prev + 2, ext.RawData.Length - (prev + 2));
items.Add(item);
}
break;
}
if (prev >= 0 && next > prev)
{
string item = Encoding.UTF8.GetString(ext.RawData, prev + 2, next - (prev + 2));
items.Add(item);
}
prev = next;
}
return items.ToArray();
}
static int IndexOf(byte[] instance, byte item, int start)
{
for (int i = start, l = instance.Length; i < l; i++)
if (instance[i] == item)
return i;
return -1;
}
static string[] EmptyStrings = new string[0];
}
}
- 1. 해지 된 인증서를 갱신하는 방법?
- 2. X509Certificate 및 SSL
- 3. X509Certificate 암호화/해독
- 4. Java에서 x509certificate certpath 생성
- 5. X509Certificate 및 XmlDsig
- 6. 패스워드없이 X509Certificate 사용
- 7. 클라이언트 X509 인증서 해지
- 8. signtool 해지 문제가 있습니까?
- 9. Tomcat6의 인증서 해지 목록
- 10. 앱에 대한 계정 해지
- 11. AlertView 해지 방지
- 12. Parallel.For 해지 vb.net
- 13. 감사 해지 작업
- 14. X509Certificate 및 .NET Compact Framework 3.5
- 15. Android에서 해지 할 수있는 배너
- 16. 검색 디스플레이 컨트롤러 키보드 해지
- 17. 해지 아이폰 OS 배포 인증서
- 18. uipopoverview 컨트롤러의 해지 사용 안함
- 19. iAd가 해지 된 시점을 어떻게 확인할 수 있습니까?
- 20. X509Certificate 발급자가 신뢰할 수 있는지 어떻게 확인합니까?
- 21. X509Certificate 오브젝트에서 개인 키를 내 보냅니다.
- 22. Bouncy Castle API를 사용하여 pgp 키 해지
- 23. 해지 기능이 인증서의 해지를 확인할 수 없습니다.
- 24. 인증서 해지 확인 용 java apis
- 25. 클래스의 생성자 유효성 검사 및 해지
- 26. OCSP 전체 인증서 체인 해지 확인
- 27. CRL (인증서 해지 목록) 파일을 생성하는 방법
- 28. 예외로 인한 이벤트 해지 메모리 누수
- 29. X509Certificate 또는 다른 .NET 클래스를 사용하여 자체 서명 된 인증서의 서명을 얻는 방법?
- 30. 관리자 모드에서 프로세스를 실행할 때 X509Certificate 개인 키 문제
예, X509Certificate2 인증서가 웹 요청에서 온 것이 아니며 인증서 파일에서 가져온 것입니다. – buda