TLSの基礎知識
- #Security
- #Encryption
- #Know-how
- 2019/01/03
TLSの基礎知識
2019年12月にBitBucketがTLS1.2のサポートしかしなくなったことより、業務でTLS1, 1.1を使用して接続しているサーバーに対してアップデートをかけたのでこれを忘れないために備忘録として書き残します。
TLSのことを知る前にまずSSLについて知っておかないといけません。
SSLとは
Secure Socket Layerのことで安全に通信を行うためのプロトコルのことです。
インターネットの普及に伴い、安全な通信方法(通信の暗号化)で接続する必要性が出てきました。
そのためSSLは発展し、現在でも使用されている通信方式となります。
身近なものとしてはhttp通信のSSL化をすることでhttpsプロトコルを使用してよりセキュアな通信をすることができる様にすることができます。
TLSとは
TLSはTransport Layer SecurityのことでSSLを引き継いだ通信プロトコルとなります。
TLSではSSLのときと比べてそれまでに知りえた攻撃手法の対策によるセキュリティの強化がされているより安全なセキュリティプロトコルのことです。
BitBucketのTLS1, 1.1のサポートが切れることはなぜ??
ここでTLSの以前のバージョンのサポートが切れたことについて書きたいと思います。
ちなみにGitHubでは昨年の2月末の時点でサポートは終了しており、TLS1.2以外での通信では接続ができなくなっているようです
参考:https://github.com/autopkg/autopkg/issues/408
これは以前のバージョンのプロトコルで接続を行うとセキュリティ的に良くないことが原因です。
以前のバージョンでは脆弱性やそれ以降のバージョンで対策のされていることについて対策が施されていない通信方式でアクセスすることとなります。
そのため、サーバー側でセキュリティの担保ができないためサイト側でTLSのサポートするバージョンを指定しているのです。
自分のサイトでTLSの接続の制限をするには??
個人サイトの運営でも、上記の理由からTLSのバージョンを制限することでよりセキュアなサイト構築ができるようになると思われます。
が、古いバージョンでの接続をするユーザーからのアクセスができなくなってしまうため要注意です。
下記のサイトより参考にTLSのバージョンを制限することができるようです(Apacheの場合)
https://weblabo.oscasierra.net/apache-httpd-sslprotocol/
Opensslでの接続を確認する方法
TLSのバージョンを指定して接続をする場合、opensslを使用して確認する方法とcurlを使用して確認する方法があります。
Opensslの場合
openssl s_client -connect SSL化をしているドメイン:443 -tls1_2
上記のコマンドで確認することができます(Linux環境)
上記のコマンドを実行して Cipher の値が0000以外のものが取得できていれば正常に接続できていることとなります。
上記のtlsのバージョンを指定している部分を1_1とかに変更してGitHubのドメインにアクセスすると接続が拒否されることが確認できると思います。(1_2では接続できます)
Curlの場合
curl -s -v --tlsv1.2 https://SSL化をしているドメイン > /dev/null
上記のコマンドで確認することができます。
こちらもTLSのバージョンを指定している部分を変更することで正常に値が取得できるかを確認することができると思います。
OpenSSLのバージョンをあげることで対応をする
古いサーバーを使用している場合、デフォルトのopensslのバージョンではTLSのバージョンを指定してコマンドを確認することができないものがあります。
私が実施してみた感じCentOSの5系では古くて使用できませんでした。
その場合はopensslのバージョンを上げてTLSのバージョンを指定して確認することができるようになります。
下記を参考にしてopensslのバージョンを更新してみてください!!
https://k-sugi.sakura.ne.jp/it_synthesis/linux/4370/
最後に
今回はTLSについて簡単にまとめてみました。
普段、インフラ側をやっていない方はTLSとは何ぞやって感じの方が多いと思いますが知っておいて損のないことですのでこの機会に自分で軽く調べてみるのもいいかもしれませんね。