以前の Transport Layer Security (TLS) バージョンの使用によってセキュリティリスクが発生した場合、イングレスゲートウェイで新しい TLS バージョンを設定できます。その後、TLS 1.0 や TLS 1.1 などの以前のバージョンを無効にし、より安全な TLS 1.2 以降を有効にすることで、中間者攻撃やデータ漏洩などのセキュリティリスクを効果的に防ぐことができます。これにより、サービスとクライアント間の HTTPS 接続の安定性とセキュリティが保証されます。
前提条件
Enterprise Edition または Ultimate Edition の Service Mesh (ASM) インスタンスが作成されており、ASM インスタンスのバージョンが v1.14 以降であること。詳細については、「ASM インスタンスを作成する」および「ASM インスタンスを更新する」をご参照ください。
クラスターが ASM インスタンスに追加されていること。詳細については、「ASM インスタンスにクラスターを追加する」をご参照ください。
イングレスゲートウェイがデプロイされていること。詳細については、「イングレスゲートウェイを作成する」をご参照ください。
ASM インスタンスに追加されたクラスターにアプリケーションがデプロイされていること。詳細については、「ASM インスタンスに追加された ACK クラスターにアプリケーションをデプロイする」をご参照ください。
背景情報
TLS 1.0 を含む初期の TLS バージョンには、既知のセキュリティ問題があり、送信中のデータ漏洩につながります。したがって、Web サイトのセキュリティを強化するためのベストプラクティスは、TLS 1.0 および TLS 1.1 を TLS 1.2 以降に置き換えることです。また、TLS 1.2 の弱いパスワードを無効にする必要があります。
手順 1:イングレスゲートウェイの証明書と秘密鍵を準備する
イングレスゲートウェイの証明書と秘密鍵を作成し、証明書と秘密鍵をシークレットに保存します。この例では、aliyun.com ドメイン名を使用します。aliyun.com ドメイン名で利用可能な証明書と秘密鍵がある場合は、秘密鍵の名前を aliyun.com.key に、証明書の名前を aliyun.com.crt に変更します。または、次の openssl コマンドを実行して、証明書と秘密鍵を作成します。
次のコマンドを実行して、ルート証明書と秘密鍵を作成します。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt次のコマンドを実行して、aliyun.com サーバーの証明書と秘密鍵を作成します。
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crtASM インスタンスのバージョンに基づいて、シークレットまたは証明書を作成します。
v1.17 より前のバージョンの ASM インスタンスの場合
kubeconfig ファイルの情報に基づいて、イングレスゲートウェイポッドが属するクラスターに kubectl を使用して接続します。次に、次のコマンドを実行して、istio-system ネームスペースに証明書と秘密鍵を含むシークレットを作成します。
kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt重要シークレット名は、istio または prometheus で始めることはできず、token フィールドを含めることはできません。
v1.17 以降のバージョンの ASM インスタンスの場合
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[証明書管理] ページで、[作成] をクリックします。[証明書情報] パネルで、必要なパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
名前
証明書の名前を入力します。この例では、myexample-credential と入力します。
公開鍵証明書
手順 2 で生成された
aliyun.com.crt証明書のコンテンツを入力します。秘密鍵
手順 2 で生成された
aliyun.com.key秘密鍵のコンテンツを入力します。
手順 2:Istio ゲートウェイを作成する
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。表示されるページで、[YAML から作成] をクリックします。
[作成] ページで、ネームスペースとシナリオテンプレートを選択し、次の YAML コードを設定します。
この例では、デフォルトのネームスペースを使用します。YAML コードでは、minProtocolVersion パラメーターが TLSV1_2 に設定されており、TLS 1.2 が使用されることを示しています。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: mysdsgateway spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: myexample-credential minProtocolVersion: TLSV1_2 // TLS 1.2 を使用するように設定 mode: SIMPLE
手順 3:仮想サービスを作成する
ASM インスタンスの詳細ページで、左側のナビゲーションペインの を選択します。表示されるページで、[YAML から作成] をクリックします。
[作成] ページで、ネームスペースとシナリオテンプレートを選択し、次の YAML コードを設定します。
手順 4:TLS バージョンを確認する
testssl.sh は無料のコマンドラインツールです。サーバーがポート経由で提供するサービスが TLS/SSL 証明書またはプロトコルをサポートしているかどうかを確認できます。このツールを使用して、一部の暗号化の欠陥を特定することもできます。このトピックでは、testssl.sh を使用して TLS バージョンを確認します。
次のコマンドを実行して、コンテナー内で testssl.sh を実行します。
docker run --rm -ti registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh https://イングレスゲートウェイの IP アドレス/productpage期待される出力では、TLS 1 と TLS 1.1 の両方で
not offeredと表示されているため、2 つのバージョンは無効になっています。TLS 1.2 と TLS 1.3 の両方でofferedと表示されているため、これら 2 つのバージョンはサポートされています。クライアントのシミュレートされたリクエストも、TLS 1.2 と TLS 1.3 をサポートするクライアントのみが接続を確立できることを示しています。
(オプション) TLS 1.2 のみを使用する必要がある場合は、次の手順を実行します。
手順 2 で作成した Istio ゲートウェイの YAML 設定を変更し、maxProtocolVersion と minProtocolVersion の両方を TLSV1_2 に設定します。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: mysdsgateway namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: myexample-credential maxProtocolVersion: TLSV1_2 // TLS 1.2 のみを許可するように設定 minProtocolVersion: TLSV1_2 // TLS 1.2 を使用するように設定 mode: SIMPLE次のコマンドを実行して、TLS 1.2 のみサポートされていることを確認します。
docker run --rm -ti registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh https://イングレスゲートウェイの IP アドレス/productpage期待される出力では、TLS 1 と TLS 1.1 に対して
not offeredと表示され、TLS 1.3 に対してnot offered and downgraded to a weaker protocolと表示されているため、3 つの TLS バージョンは無効になっています。TLS 1.2 に対してofferedと表示されているため、TLS 1.2 のみサポートされています。クライアントのシミュレートされたリクエストも、TLS 1.2 をサポートするクライアントのみが接続を確立できることを示しています。
(オプション) TLS 1.3 のみを使用する必要がある場合は、次の手順を実行します。
手順 2 で作成した Istio ゲートウェイの YAML 設定を変更し、maxProtocolVersion と minProtocolVersion の両方を TLSV1_3 に設定します。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: mysdsgateway namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: myexample-credential maxProtocolVersion: TLSV1_3 // TLS 1.3 のみを許可するように設定 minProtocolVersion: TLSV1_3 // TLS 1.3 を使用するように設定 mode: SIMPLE次のコマンドを実行して、TLS 1.3 のみサポートされていることを確認します。
docker run --rm -ti registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh https://イングレスゲートウェイの IP アドレス/productpage期待される出力では、TLS 1.0、TLS 1.1、および TLS 1.2 に対して
not offeredと表示されているため、3 つの TLS バージョンは無効になっています。TLS 1.3 に対してofferedと表示されているため、TLS 1.3 のみサポートされています。クライアントのシミュレートされたリクエストも、TLS 1.3 をサポートするクライアントのみが接続を確立できることを示しています。