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サーバーでサポートされている暗号スイート (緑色の輪郭はサーバーに共通のものです)
サーバーでサポートされている暗号スイート
私も Nartac IIS暗号化ソフトウェア を使用しました。次の情報をBest Practices
問題と関係があるかどうかはわかりませんが、サーバーにインストールされているSSL証明書の詳細は次のとおりです。
ローカルマシンで完全に実行しているので、目的のサーバーと通信し、サーバーにデプロイされたアプリケーションから支払いを行うために、私たちが間違っていることと何をすべきかを誰かが指摘できますか。
問題はオペレーティングシステムでした。 Windows Server 2008を使用していましたが、アプリケーションが他のサーバーと通信するためにOSのプロトコルが必要であることに気づきませんでした。 .NET Framework 4.5がインストールされており、コードServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
を使用してアプリケーションにTls1.2
を強制的に使用させているため(要件に応じて)、すべてが正常に機能するはずですが、明らかにこれはそうではありませんでした。起こりそうです。
tl; dr;マシンにWindows Server 2012
をインストールしましたが、アプリケーションは正常に実行されています(必要に応じて)
私は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アプリが.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を有効にするのに役立つことがわかりました クライアントとサーバーは共通のアルゴリズムを持っていないため通信できません