キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
990
閲覧回数
0
いいね!
0
コメント
mnagao
Cisco Employee
Cisco Employee

 

 

はじめに

Cisco Digital Network Architecture Center (DNA Center) で使用している API Gateway (Kong) の TLS minimum version のデフォルトは 1.1 になっています。運用ポリシーとして TLS v1.1 が許可されない環境では、以下の手順により minimum version を 1.2 に変更できます。設定変更時は REST API, GUI 接続などがしばらくできなくなりますので、運用開始前に設定しておくことをおすすめします。なお、DNA Center 1.3.1 時点では TLS v1.3 はサポートされていません。

 

現状確認

ノード毎に稼働している kong の TLS minimum version を確認します。以下は 3 node cluster の例です

// 稼働 Pod の確認
[Fri Jan 24 03:56:21 UTC] maglev@192.0.2.3 (maglev-master-192-0-2-3) ~
$ magctl appstack status maglev-system | grep kong
kong-5fb75d9c7b-7q78x 2/2 Running 0 10d 10.63.5.93 192.0.2.3 <none>
kong-5fb75d9c7b-hfr2p 2/2 Running 0 9d 10.63.5.168 192.0.2.1 <none>
kong-5fb75d9c7b-nq4kz 2/2 Running 0 10d 10.63.1.47 192.0.2.2 <none>

// TLS minimum version の確認
[Fri Jan 24 03:56:27 UTC] maglev@192.0.2.3 (maglev-master-192-0-3-3) ~
$ magctl service tls_version --tls-min-version show
TLS minimum version is 1.1

// 設定は kubectl describe pods でも確認できます。
[Fri Jan 24 04:00:20 UTC] maglev@192.0.2.3 (maglev-master-192-0-2-3) ~
$ kubectl describe pods -n maglev-system kong | grep -E "^IP:|^Controlled By|^\s\skong|TLS"
IP: 10.63.5.93
Controlled By: ReplicaSet/kong-5fb75d9c7b
kong:
TLS_MIN_VERSION: 1.1
kong-sidecar:
TLS_MIN_VERSION: 1.1
IP: 10.63.5.168
Controlled By: ReplicaSet/kong-5fb75d9c7b
kong:
TLS_MIN_VERSION: 1.1
kong-sidecar:
TLS_MIN_VERSION: 1.1
IP: 10.63.1.47
Controlled By: ReplicaSet/kong-5fb75d9c7b
kong:
TLS_MIN_VERSION: 1.1
kong-sidecar:
TLS_MIN_VERSION: 1.1

 

Mac/Linux などなら DNA Center へ TLS version 1.1 指定で接続を行うと証明書を取得できるので ClientHello, ServerHello ネゴシエーションが成功し、Certificate ペイロードが送信されていることが分かります。

// 稼働 Pod の確認
bash-3.2$ openssl s_client -connect 192.0.2.3:443 -tls1_1 < /dev/null
CONNECTED(00000003)
depth=1 CN = 85a9b2c2-1d10-db2c-c593-a74c88a988da, O = Cisco Systems, OU = Cisco DNA Center
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
0 s:/CN=kong
i:/CN=85a9b2c2-1d10-db2c-c593-a74c88a988da/O=Cisco Systems/OU=Cisco DNA Center
1 s:/CN=85a9b2c2-1d10-db2c-c593-a74c88a988da/O=Cisco Systems/OU=Cisco DNA Center
i:/CN=85a9b2c2-1d10-db2c-c593-a74c88a988da/O=Cisco Systems/OU=Cisco DNA Center
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFDTCCA/WgAwIBAgIJAOzjWQrb8q4UMA0GCSqGSIb3DQEBCwUAMGIxLTArBgNV
<snip>
ng==
-----END CERTIFICATE-----
SSL-Session:
Protocol : TLSv1.1
<snip>

 

設定変更

magctl service tls_version --tls-min-version 1.2 を実行すると既存 Pod が delete され、新しい Pod が作成されます。

// 稼働 Pod の確認
[Fri Jan 24 04:01:15 UTC] maglev@192.0.2.3 (maglev-master-192-0-2-3) ~
$ magctl service tls_version --tls-min-version 1.2
Enabling TLSv1.2 will disable TLSv1.1 and below
Do you want to continue? [y/N]: y
WARNING: Enabling TLSv1.2 for api-gateway
deployment.extensions/kong patched

// 新しい Pod が Running になり、Pod 内のコンテナが起動するまでしばらくかかります。
[Fri Jan 24 04:01:36 UTC] maglev@192.0.2.3 (maglev-master-192-0-2-3) ~
$ magctl appstack status maglev-system | grep kong
kong-5fb75d9c7b-7q78x 2/2 Running 0 15m 10.63.5.93 192.0.2.3 <none>
kong-5fb75d9c7b-hfr2p 0/2 Terminating 0 14m <none> 192.0.2.1 <none>
kong-5fb75d9c7b-nq4kz 2/2 Running 0 15m 10.63.1.47 192.0.2.2 <none>
kong-d65c457c8-8pnlt 0/2 Pending 0 6s <none> <none> <none>
kong-d65c457c8-t8ffx 0/2 Pending 0 6s <none> <none> <none>

[Fri Jan 24 04:04:58 UTC] maglev@192.0.2.3 (maglev-master-192-0-2-3) ~
$ magctl appstack status maglev-system | grep kong
kong-d65c457c8-8pnlt 1/2 Running 0 3m 10.63.1.54 192.0.2.2 <none>
kong-d65c457c8-c2xn8 2/2 Running 0 2m 10.63.5.76 192.0.2.3 <none>
kong-d65c457c8-t8ffx 2/2 Running 0 3m 10.63.5.183 192.0.2.1 <none>

[Fri Jan 24 04:05:39 UTC] maglev@192.0.2.3 (maglev-master-192-0-2-3) ~
$ magctl appstack status maglev-system | grep kong
kong-d65c457c8-8pnlt 2/2 Running 0 4m 10.63.1.54 192.0.2.2 <none>
kong-d65c457c8-c2xn8 2/2 Running 0 3m 10.63.5.76 192.0.2.3 <none>
kong-d65c457c8-t8ffx 2/2 Running 0 4m 10.63.5.183 192.0.2.1 <none>

 

  

動作確認

TLS minimum version が 1.2 になっていることを確認します。

[Fri Jan 24 04:06:24 UTC] maglev@192.0.2.3 (maglev-master-192-0-2-3) ~
$ magctl service tls_version --tls-min-version show
TLS minimum version is 1.2

[Fri Jan 24 04:06:31 UTC] maglev@192.0.2.3 (maglev-master-192-0-2-3) ~
$ kubectl describe pods -n maglev-system kong | grep -E "^IP:|^Controlled By|^\s\skong|TLS"
IP: 10.63.1.54
Controlled By: ReplicaSet/kong-d65c457c8
kong:
TLS_MIN_VERSION: 1.2
kong-sidecar:
TLS_MIN_VERSION: 1.2
IP: 10.63.5.76
Controlled By: ReplicaSet/kong-d65c457c8
kong:
TLS_MIN_VERSION: 1.2
kong-sidecar:
TLS_MIN_VERSION: 1.2
IP: 10.63.5.183
Controlled By: ReplicaSet/kong-d65c457c8
kong:
TLS_MIN_VERSION: 1.2
kong-sidecar:
TLS_MIN_VERSION: 1.2

[Fri Jan 24 04:06:36 UTC] maglev@192.0.2.3 (maglev-master-192-0-3-3) ~
$ exit
logout

 

 

Mac/Linux などから DNA Center へ TLS version 指定で接続を行うと TLS v1.1 では証明書の取得ができないことが分かります。

bash-3.2$ openssl s_client -connect 192.0.2.3:443 -tls1_1 < /dev/null
CONNECTED(00000003)
write:errno=54
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.1
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Start Time: 1579840653
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---


bash-3.2$ openssl s_client -connect 192.0.2.3:443 -tls1_2 < /dev/null
CONNECTED(00000003)
depth=1 CN = 85a9b2c2-1d10-db2c-c593-a74c88a988da, O = Cisco Systems, OU = Cisco DNA Center
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
0 s:/CN=kong
i:/CN=85a9b2c2-1d10-db2c-c593-a74c88a988da/O=Cisco Systems/OU=Cisco DNA Center
1 s:/CN=85a9b2c2-1d10-db2c-c593-a74c88a988da/O=Cisco Systems/OU=Cisco DNA Center
i:/CN=85a9b2c2-1d10-db2c-c593-a74c88a988da/O=Cisco Systems/OU=Cisco DNA Center
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFDTCCA/WgAwIBAgIJAOzjWQrb8q4UMA0GCSqGSIb3DQEBCwUAMGIxLTArBgNV
<snip>
ng==
-----END CERTIFICATE-----
<snip>
SSL-Session:
Protocol : TLSv1.2
<snip>

 

TLS v1.1 の ClientHello に対して TCP RST を返すなどして Handshake に失敗するようになります。

tcp-rst-tls11.png

 

 

 

参考情報

その他一般的なセキュリティ・ベストプラクティスについては以下をご参照ください。

 

Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします