10

SSLの目的で他の証明書に署名するために使用する自己署名CA証明書を作成しました。これらの証明書は、アクセスできない他のサーバーにインストールされ、モバイルアプリケーションなどの他のクライアントと厳密に通信するために使用されます。

これらのクライアント(.NETで記述)がHTTPSを使用してサーバーに要求を行うと、CA証明書はそのクライアントで信頼できるCAではないため、「サーバーから無効な証明書を受信しました」というエラーが発生します。

を使用してこのセキュリティをバイパスしたいのですがServicePointManager.ServerCertificateValidationCallback、使用している証明書がCA証明書によって署名されている場合に限ります。

を確認するcertificate.Issuerことはできますが、だれでも簡単になりすますことができます。無効な証明書の発行者証明書の指紋または公開鍵を取得するにはどうすればよいですか?アクセスできる場合は、有効であることがわかっているものと簡単に比較して、証明書エラーを無視し、要求を続行できます。

アップデート

近づいていると思います。私たちがやろうとしていることは実行できないように見えるので、少し異なる方向に進みました。

X509Chain以下のコードを使用して、証明書がCAの子であるかどうかを確認できます。

var caCert = new X509Certificate2(@"[path]\MyCA.cer");

var newChain = new X509Chain();
newChain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
newChain.ChainPolicy.ExtraStore.Add(caCert);

var res = newChain.Build(certInQuestion);

Build()それでもfalseを返します(CAがクライアントで信頼されていないため、予想どおり)が、現在newChain.ChainStatus[0].Statusはを返していUntrustedRootます。私のテストに基づくと、これはチェーンが検証されたことを意味します。別のCA証明書を指定すると、で失敗するためInvalidChainです。

結論として、ステータスがUntrustedRootである場合、証明書CA証明書を使用して作成されているため、有効であり、それ以外は偽物であることがわかります。

私の仮定は正しいですか?

4

4 に答える 4

0

これがあなたが探しているものであるかどうかは完全にはわかりませんが、正しい方向に進む可能性があります. MAKECERT.EXE & CERTMGR.EXE を使用して作成および抽出したばかりの証明書を見つけるために使用する PowerShell スクリプトを次に示します。

# get certificate thumbprint
$appCertificate = Get-PfxCertificate -FilePath $certificateFullPath

Write-Host "  .. adding certificate to local machine root" -ForegroundColor Gray 
& $ExeCertManager /add $certificateFullPath /s /r localMachine root
Write-Host "  Certificate installed on local machine" -ForegroundColor Gray 

Write-Host "  .. exporting private key for certificate" -ForegroundColor Gray 
Get-ChildItem cert:\\localmachine\my | Where-Object {$_.Thumbprint -eq $appCertificate.Thumbprint} | ForEach-Object {
    $CertPfxName = (Get-Item -Path $certificateFullPath).BaseName
}
于 2013-01-31T20:16:27.300 に答える
0

無料の公開鍵と秘密鍵を生成するための情報とツールへのリンクを次に示します。

https://www.igolder.com/pgp/

https://www.igolder.com/pgp/generate-key/

EJPのソリューションが最も受け入れられると思います。@EJP、「小さな CA」になるのに役立つアプリケーションの例をいくつか教えてください。

于 2013-02-19T20:00:15.020 に答える
0

それは間違った解決策です。自己署名証明書を信頼された CA 証明書としてすべてのクライアントにインストールするか、既に信頼されている CA によって署名された証明書を取得することをお勧めします。このためのコードを書かないでください。

于 2013-01-31T22:42:56.050 に答える
0

https://stackoverflow.com/a/4473799/674700の回答によると、証明書を電子メールで送信することで解決できるようです。

于 2013-01-31T23:07:58.387 に答える