web-dev-qa-db-ja.com

クライアントとサーバーは、Windows Server 2008 Webで共通のアルゴリズムを持っていないため、通信できません。

ASP.NetWebFormsアプリケーションに取り組んでいます。支払いプロセスには PayFortのStart API を使用しています。アプリケーションはローカルマシン(Windows 10)で正常に実行されていますが、展開サーバー(Windows Server Web 2008)でAPIを使用して支払いを行おうとすると、次のエラーが表示されます。

クライアントとサーバーは共通のアルゴリズムを持っていないため、通信できません。

彼らのウェブページ( PayFortStartおよびSSL/TLS )のドキュメントには、通信にTls1.2を使用していると記載されています。彼らのAPIには、セキュリティプロトコルとしてTls1.2を使用するためのコードがすでに含まれています

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Tls1.2は.Net 4.5以降でのみサポートされているため、.Net Framework4.5でアプリケーションを構築しました。言うまでもなく、私たちのサーバーには.Net Framework4.5がインストールされています。

WindowsレジストリにTls1.1とTls1.2のレジストリ値も追加しました

SSL Labsツール を使用して、両方のサーバー(サーバーとPayFortのAPIサーバー)でサポートされている暗号スイートが少なくとも2つあることも確認しました( https:/ /api.start.payfort.com

PayFortのAPIサーバーでサポートされている暗号スイートCipher suites supported by PayFort's API Server (緑色の輪郭はサーバーに共通のものです)

サーバーでサポートされている暗号スイートCipher Suites supported by our server

私も Nartac IIS暗号化ソフトウェア を使用しました。次の情報をBest PracticesNartac IIS crypto details

問題と関係があるかどうかはわかりませんが、サーバーにインストールされているSSL証明書の詳細は次のとおりです。
SSL certificate details

ローカルマシンで完全に実行しているので、目的のサーバーと通信し、サーバーにデプロイされたアプリケーションから支払いを行うために、私たちが間違っていることと何をすべきかを誰かが指摘できますか。

6
sohaiby

問題はオペレーティングシステムでした。 Windows Server 2008を使用していましたが、アプリケーションが他のサーバーと通信するためにOSのプロトコルが必要であることに気づきませんでした。 .NET Framework 4.5がインストールされており、コードServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;を使用してアプリケーションにTls1.2を強制的に使用させているため(要件に応じて)、すべてが正常に機能するはずですが、明らかにこれはそうではありませんでした。起こりそうです。
tl; dr;マシンにWindows Server 2012をインストールしましたが、アプリケーションは正常に実行されています(必要に応じて)

2
sohaiby

私はPayfortStartチームに所属しています。この問題をより詳細に説明するのに役立つページ ここ があります。基本的に、APIクライアント(HTTPS要求を行うために使用しているライブラリ)はTLS1.2をサポートする必要があります。 Start APIは、少なくともTLS1.2をサポートしていないリクエストを拒否します。

WebRequestはTLS1.1および1.2をサポートしているように見えますが、手動でオンにする必要があります。修正については この回答 を参照できます。

クライアントがTLS1.2をサポートしていることを確認するために、アプリケーションから https://www.howsmyssl)にGETリクエストを送信できます。 com/a/check そして応答を読んでください。

CURLの場合:

> curl -X GET https://www.howsmyssl.com/a/check

戻り値:

{
  given_cipher_suites: [
    "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
    "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
    "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
    "TLS_RSA_WITH_AES_128_GCM_SHA256",
    "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
    "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
    "TLS_RSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
    "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
    "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
    "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
    "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
    "TLS_RSA_WITH_RC4_128_SHA",
    "TLS_RSA_WITH_RC4_128_MD5",
    "TLS_RSA_WITH_AES_128_CBC_SHA",
    "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
    "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"
  ],
  ephemeral_keys_supported: true,
  session_ticket_supported: true,
  tls_compression_supported: false,
  unknown_cipher_suite_supported: false,
  beast_vuln: false,
  able_to_detect_n_minus_one_splitting: false,
  insecure_cipher_suites: {
    "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA": [
      "uses keys smaller than 128 bits in its encryption"
    ]
  },
  tls_version: "TLS 1.2",
  rating: "Bad"
}

最後にあるtls_versionに注意してください。

1
FloatingRock

これがあなたの状況を少し明確にし、助けになることを願っています:

1アプリが.net 4.5(またはそれ以降)で実行されていることを確認します。

TLS1.2は4.5以降でサポートされています。アプリが実行されている.netフレームワークの実際のバージョンを取得するには: https://msdn.Microsoft.com/en-us/library/system.environment.version(v = vs.110).aspx ==

2WindowsレジストリでTLS1.2を有効にします。

このリンクがTLS1.2を有効にするのに役立つことがわかりました クライアントとサーバーは共通のアルゴリズムを持っていないため通信できません

1
Gabriel Pavel