web-dev-qa-db-ja.com

NETSH-SSL証明書をポートにバインドしてトラフィックをアプリケーションに渡す方法は?

Windows Server2016の場合

私は単純なpython Webサーバー(フラスコ内)を持っています。それはうまく機能し、ポート80(または私がリッスンするように構成したもの)でリッスンします。

SSL経由で提供する必要があります。

良い証明書を持っていて、それをコンピューター/パーソナル証明書ストアにインポートしました。

それから私は走った:

netsh http add sslcert ipport=0.0.0.0:443 certhash=8caef2be185a0c94d################ appid="{7E46BD40-39C6-4813-B414-019AD3332421}"   

netsh http add urlacl url=https://+:443/ user=Everyone

コマンドは正常に実行されます。 443でflask Webサーバーを実行していますが、暗号化されていない状態でサービスを提供しています。例:.

https://Host/    // fails, because the server is serving plain text
http://Host:443   // works, because the traffic ain't ssl-ified

解決する方法は?

明確にするために:flaskコードに触れずに解決する方法(SSL証明書をファイルシステムに配置したくない、安全ではありません)。netshを使用して終了できると思います任意のWebサーバーの前でSSL?

答えは:netshを忘れて、チケットではないようです。

ここに記載されているように、リバースプロキシとしてIISを使用して解決しました:

https://developers.coveo.com/display/public/SearchREST/Configure+HTTPS+Reverse+Proxy+in+IIS

そしてここ

https://weblogs.asp.net/owscott/creating-a-reverse-proxy-with-url-rewrite-for-iis

私はFlaskにあまり詳しくありません。しかし、SSLを使用するWindowsで実行した他のすべてのpythonアプリは、PEM形式の証明書とキーファイルを直接参照していました。それらはWindows証明書ストアとまったくインターフェイスしなかったか、netsh構成を必要としませんでした。 。同じことがFlaskにも当てはまると思います。これらのファイルを参照し、HTTPS経由でトラフィックを処理する特定の方法があります。

「python flask ssl」の簡単なウェブ検索は、いくつかの有望な結果をもたらすようです:

コンセンサスは、証明書とキーを参照するSSL.Contextのインスタンスを作成し、それを引数としてapp.runに渡すことを中心に展開しているようです。

0
Ryan Bolger