X509Certificateが取り消されたときに、プログラムでどのように取得できますか?証明書が取り消された場合は情報を得ることができますが、取り消しが必要な場合はCRLリストにその情報があると思いますが、誰かにその情報の読み方を教えてもらえますか?取り消されたX509Certificate
答えて
あなたが取り消しと言うとき、あなたは無効であるとお考えですか?それが取り消された場合、Webサーバーが最初に邪魔になるので、私はそれがあなたのコード内の要求に到達するとは期待しません。
x509certificateから派生したx509certificate2を使用すると、確認できるプロパティがさらに増えます。下のリンクにいくつかの例があります。
失効ステータスが(a)はCRLリストを取得し、証明書がリストされているかどうかをチェックする、および(b)は同じことを確認するため、サーバーへのOCSP要求を送信することによりチェックされています。
.NETではこれを行えません。 CryptoAPIにはこれらの操作のための手段があるかもしれませんが、.NETのサードパーティライブラリを使用するのが最も簡単です。 BouncyCastleはOCSPとCRLをサポートしていると主張しており、SecureBlackboxはOCSPとCRLの完全なサポート(クライアントコンポーネントとサーバーコンポーネントの両方が利用可能)を提供しており、完全な証明書検証(CRLとOCSPのすべてのチェックと必要に応じてHTTPとLDAPの通信)を1つのメソッド呼び出しで実行します。
使用x509.hファイル用のOpenSSLからこのAPI 1.0 /又はバージョン
X509_CRL_get0_by_cert上記(X509_CRL * CRL、X509_REVOKED ** RET、X509用* 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は、証明書が失効されていないことを意味します。コードはこのようになりX509 CRLと
:
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
CRLはX509Certificateオブジェクトの拡張プロパティにOIDとして格納されます。 OID FriendlyNameと値は「CRL配布ポイント」と「2.5.29.31」です。 OIDが2.5.29.31の証明書の拡張機能を検索すると、生データを解析して配布ポイントを取得できます。
次のコードサンプルは、hereです。私は公的に証明書と内部のMicrosoft CA証明書の両方でそれをテストしました。 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. REVOKE_ACCESS:継承されたACEを '取り消し'する方法
- 2. セロリのタスクが取り消されない
- 3. opencartの支払いがpaypalで取り消される
- 4. iOSディストリビューションの署名IDが取り消されたのはなぜですか?
- 5. Gitで削除されたすべてのファイルを取り消す
- 6. Scalaで "消去によって消去されました"という警告を取り除く
- 7. Javaで署名されたアプレット証明書がMacでのみ取り消されました。OSX10.7(Lion)
- 8. 生成されたx509certificateをJavaのHexに変換する方法
- 9. Oauthの取り消しトークン
- 10. 登録を取り消す
- 11. Android:アクティビティごとに消費された時間を取得
- 12. Infopath文書の有効期限が切れている、または取り消された署名証明書
- 13. メモリクラッシュによりNSUserDefaultsが消去されましたか?
- 14. 消去されたクラスはxcode 4.2で消えますか?
- 15. 任意のHTTPS URLからX509Certificateを取得する方法は?
- 16. 私のWCFサービスホスト用のX509Certificateを取得する方法
- 17. アンドロイドの許可を取り消しましたが、checkselfpermissionはまだ返されました。
- 18. キーボードショートカットに設定されているデフォルトのアクションを取り消す
- 19. コミットされていないと「破棄」を取り消す方法
- 20. OCamlのコンテキストでは何が取り消されていますか?
- 21. X509Certificateをきれいに印刷する方法はありますか?
- 22. クライアントへの接続が失われたときにリクエストを取り消す
- 23. ASP.NET MVCアクションを取り消す方法
- 24. NetSuite:SuiteScriptで注文を取り消す
- 25. Mochaでクラスメソッドを取り消す
- 26. svnの取り消し方法
- 27. プロデューサーのコンシューマーリクエストの取り消し
- 28. Tomcatで要求を取り消す
- 29. SQSでセロリタスクを取り消す
- 30. のXcode 7.3:取り消し線
はい、私はX509Certificate2証明書がWeb要求からではなく、証明書ファイルからのものだと考えました。 – buda