web-dev-qa-db-ja.com

ASP.NET 2.0アプリケーションでAPI呼び出しのTLS 1.2を有効にする方法

ASP.NET 2.0 Webサイトは、Authorize.NetのAPIへの呼び出しを介してクレジットカードトランザクションを処理します。 Authorizeは、発表される特定の日に、クライアントmust API呼び出しにTLS 1.2プロトコルを利用することを通知しました。

Microsoftは、この10-22-16 KB記事で解決策が利用可能であることを示しているようです: https://support.Microsoft.com/en-us/help/3154517/support-for-tls-system-default -versions-included-in-the-.net-framework-2.0-sp2-on-windows-Vista-sp2-and-server-2008-sp2

... TLS v1.2、TLS v1.1、およびターゲット時のServicePointManager.SecurityProtocolプロパティのオペレーティングシステムのデフォルトを設定するためのオプションとして使用できるSslProtocolsExtensions列挙を追加しました.NET frameworkバージョン2.0 SP2

この記事のタイトルにもかかわらず、上記の引用はnotを指していることに注意してください。これらのオペレーティングシステムはTLS v1.1および1.2をサポートしていないためです。

次の手順を実行して、KB記事に示されているソリューションの理解を実装し、テストしました。

  1. Windows Server 2008 R2 WebサーバーでTLS 1.2を有効にしました(ssllabs.comで確認済み)。
  2. 実際、SP2が.NET frameworkバージョン2.0用にインストールされていることを確認しました。
  3. 参照KB記事に示されている2つのソースファイルをプロジェクトに追加しました(つまり、SecurityProtocolTypeExtensions.csとSslProtocolsExtensions.cs)
  4. API呼び出しのすぐ上のプロジェクトに次のコード行(KB記事から)を入力しました。System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12;

残念ながら、アプリケーションを実行すると、上記の項目#3に示されているコード行で次のエラーが発生します。

System.NotSupportedException:要求されたセキュリティプロトコルはサポートされていません。

この時点で、私は困惑しています。このソリューションをどのように進めるかについての洞察は特にありがたいですが、ASP.NET 2.0アプリケーションからのAPI呼び出しでTLS 1.2を利用できるようにするために知っている他のアプローチについて学ぶことに興味があります。 (.NETフレームワークの最新バージョンへのアップグレードは最後の手段です。)

よろしくお願いします!

10
cjo30080

.NET 2.0アプリでTLS 1.2に移行する必要があり、コードを.NET 4.5/4.6に移植したくありませんでした。数日間の調査の後、この投稿に出会った後、解決策を見つけました。この投稿は間違ったHOTFIXを参照しています。 Server 2008 R2上の.NET 2.0でTLS 1.2を機能させるには、このHOTFIXが必要です: https://support.Microsoft.com/en-us/help/3154518/support-for-tls-system-default- version-included-in-the-.. net-framework

3.5.1フレームワークを参照しますが、2.0フレームワークでも動作します。修正プログラムがインストールされると、サーバーでレジストリの変更を行うことができますOR TLS 1.2を直接参照するようにアプリでコードを変更します。

C#ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072;

VB ServicePointManager.SecurityProtocol = DirectCast(3072、System.Net.SecurityProtocolType)

他のOSについては、Troy Starrの投稿をチェックしてください: https://community.qualys.com/thread/16917-net-framework

お役に立てれば

10
JoeBoxer

このスレッドを見つけた人は誰でも、上記の元の質問で説明したのと同じ手順(#1〜#4)を使用して、TLS 1.2を.Net 3.5で動作させることができました。 Win 2012サーバーにパッチを適用すると(共有ホスティング会社は十分に適用できました)、API呼び出しの前にTLS 1.2を有効にするコード行を追加すると、すぐに機能しました。

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12;
6
B-Rad

私はこの質問が少し古いことを理解しています-しかし、他の人の助けのために私たちのために働いた-そして私たちのAuthorize.Netトランザクションは現在、私たちの.NET 2.0 AbleCommerceアプリケーション上のTLS 1.2で動作します。 [生産の移行期限は2018年2月28日まで延長されたようです]

環境:Windows Server 2008 R2、IIS 7.5、AbleCommerce 7.0.2 build 11659、CommerceBuilder.AuthorizeNet 7.0.9764.0

上記の@JoeBoxerの回答によると、 このリンク はトリックを行いました-具体的にはx64ベースのシステムの2つのレジストリキーを設定しました(リストされたパッチはボックスにインストールされません):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001 

また、TLS 1.2のエントリがなかったため、 this を行いましたが、これだけでは問題は解決しませんでした。

1
rktect

AS TLS 1.2はasp.net 2.0をサポートしていません。プロジェクトをasp.net 2.0から最新/上位バージョンに移行せずにTLS 1.2を実装する別の方法があります。手順は次のとおりです。

  1. Asp.netの上位バージョンで新しいプロジェクトを作成します。
  2. 新しいWebサービスまたはWebAPIを追加します(後でメインプロジェクトで使用します)。
  3. ここに特定のコードを書き留め、TLS 1.2で検証する必要がある特定のAPIを呼び出します。
  4. 次に、このWebサービス/ WebAPIをデプロイし、メインプロジェクトで使用します。

以下にサンプルコードを示します。

[WebMethod]
        public LoginResult TestLogin(string _username, string _password, string _tokenID)
        {
            try
            {
                System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType)3072;
                LoginResult _loginResult = new LoginResult();
                _loginResult = _sForceRef.login(_username, _password + _tokenID);
                return _loginResult;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {

            }
        }
Reference
namespace System.Net
{
    [System.Flags]
    public enum SecurityProtocolType
    {
       Ssl3 = 48,
       Tls = 192,
       Tls11 = 768,
       Tls12 = 3072,
    }
}
0
Raj