C# Web サービスの暗号化
-
09-06-2019 - |
質問
C# Web サービスで SOAP 通信を暗号化する簡単な方法を探しています。
調べていました WSE3.0 しかし、Microsoft がそのサポートを終了したようで、そのため使用するのは簡単ではありません。
WCF も選択肢にあったようですが、私は .NET 2.0 からアップグレードしたくないです。
どれでも 単純, 、簡単な暗号化方法?
解決
これが役立つと思います。昨年、これを使用して Web サービスを圧縮しましたが、非常にうまく機能しました。暗号化クラスを使用して強化できると思います。
他のヒント
SSL/TLS を使用しない「暗号化」を行うと、脆弱になる可能性があります。さて、あなたは自問しなければなりません。ゴムチキンのようなセキュリティ対策の機能に開発時間を費やす価値があるでしょうか?もしかしたらそうかも知れません。
DPAPI や Win32 crypt32 API などの .NET API を使用すると、静的キーを使用してデータの BLOB を簡単に暗号化できます。しかし、クライアントはどのようにしてキーを受け取るのでしょうか?インストールされている SOAP クライアントは、構成にキーを焼き込むか、安全でないインターネット経由でキーを受信する必要があります。
これは、SSL/TLS が解決する問題です。TLS 証明書を使用して行うダンスは、信頼できないチャネルを介して公開鍵を通信する問題を解決します。
私が世間知らずなのかもしれないが、そうだろうか? を介して通信することを余儀なくされる。 httpsでもいいのか?私はウェブ開発をしている。 2.0で稼動しているサービスには、次のようなものがある。 IISを でhttps を強制する。 ディレクトリにある。
それが最もシンプルな方法だろう おそらくそうだろうが、残念ながら私はそうではない IISをコントロールする を保証することはできない。 https を実行できる。
その場合、おそらく最善の策は、SOAP メッセージの一部をケースバイケースで暗号化すること (結局のところ、メッセージ全体を暗号化する必要はないかもしれません。特定の機密フィールドのみを暗号化する必要があるのでしょうか?)、または次のいずれかを使用することを選択することです。すべてのメッセージをインターセプトし、コンテンツを操作するための HttpModule。どちらの場合も、おそらくカスタム プロキシを提供する必要があります。
私が甘いかもしれませんが、通信を https 経由で行うことを強制してもよいでしょうか?私は 2.0 で実行される Web サービスを開発しており、IIS で仮想ディレクトリに https を強制するだけで成功しました。
代わりに、またはさらに、次のことを確認できます。 HttpRequest.IsSecureConnection プロパティ.
実際、私たちは Web サービスで WSE 3.0 を使用していますが、これはもともと WCF より前に開発されたものです。セキュリティのために、System.Security の Cryptography クラスに基づいて構築された SAML トークン ベースのシステムを使用します。
とてもうまくいきます。ただし、この方法は決して「簡単」ではありません。
System.Security.Cryptography 拡張機能を使用して、C# でパラメーターの暗号化を使用できます。
パラメータの暗号化と復号化はより困難ですが、はるかに安全です。
方法:対称 (Rijndael) キーを使用したデータの暗号化と復号化 (C#/VB.NET)
私はこのアプローチを OTP (ワンタイム パスワード) Web サービスに使用していますが、うまく機能します。