2017-09-17 4 views
1
のコードを使用して、信頼唯一の特定の証明書に(私自身)、

を実装することができコンテキストどうすればServerCertificateValidationCallback

クライアントコードは、リモートのWeb APIに接続する必要があります。 SSLは、有線で交換される機密情報のため必須です。私たちは自ら発行した証明書を持っています 現在、リモートIISに適切に設定されているものはありません。証明書が信頼されていないことを除いて、すべてが正常にテストされています。

ローカルマシンに証明書をインストールして信頼することができます。しかし、何らかの理由で(例えば、XamarinのAndroidクライアントもあります)、それは適切な解決策ではありません。

現在の問題を回避するには、単にデスクトップ上の両方のAndroid Xamarinの両方取り組んでいるコードで証明書エラー、無視することです:

ServicePointManager.ServerCertificateValidationCallback = 
(s, certificate, chain, sslPolicyErrors) => 
{ 
    // Here I would like to check against that the certificate 
    // is the specific one I issued, and only that case return with true 

    // if (what is the most suitable to write here?) 
    return true; 
}; 

質問を

注:これは、開発/テスト段階です。プロダクションでは、信頼できる認証局によって作成された証明書がインストールされます。

今私は何かを受け入れることについて悪い気持ちがあるので、私はそれを絞りたいと思います。 証明書が発行された特定のものであることを確認する方法は、そのケースだけが真で返されます。 これは、コードを実行し、ブレークポイントを配置し、証明書を取得する作業アイデアですか?サムプリント?

...またはそれ以上... PublicKeyStringを取得して確認しますか?

+0

証明書の拡張子[Subject Key Identifier](https://knowledge.symantec.com/support/registrar-name/index?page=content&actp=CROSSLINK&id=SO18140#SKI)をチェックして、別個の値を許可することができます。 –

+0

拇印を使用すると、1つの証明書に絞ることができます。公開鍵またはSubject Key Identifierを使用すると、同じ鍵ペアに限定されますが、同じ証明書には限定されません。 – pepo

+0

識別子をハードコードしたら、証明書全体を 'byte []'として埋め込み、それを 'cert.RawData'と比較するだけです。 – bartonjs

答えて

1

拇印を確認することは、IMHOのOKオプションです。拇印を使用すると、信頼を1つの証明書に限定することができます。

公開鍵またはサブジェクトキー識別子を確認することもできますが、同じ鍵ペアに信頼を拡張します。同一の公開鍵で発行された複数の証明書が存在する可能性があります(同一の識別名を使用する場合と使用しない場合があります)。

@bartonjsが述べたように、別のオプションとして、生データをチェックすることもできます。このアプローチは、拇印と照合するのと同じ力があります。このメリットは、あなたが今から1年後にコードを見ると、信用できる証明書をまだ知っているということです。私が正しく覚えていれば、3か月の証明書を発行して暗号化しましょう)、あなたのアプリケーションは新しい証明書のチェックで再配布する必要があります。証明書の有効期限を追跡する必要があります。