ナンモワカランアザラシ

技術的なアレコレを自分の言葉で書いて保管・公開しておくための静かなインターネット

SSL接続をするために秘匿情報を3つダウンロードさせられたのでそれぞれきちんと理解したい

Cloud SQLで作ったMySQLのDBインスタンスにアプリケーションからSSLで接続しようとしたら3つの秘匿情報をダウンロードしていい感じに配置しろと言われた。

  • client-key.pem
  • cleint-cert.pem
  • server-ca.pem

SSL / TLS 証明書の構成

これらのうち、SSL接続の確立のためにクライアントに必須のものはない。ただし、これらの秘匿情報を持たないと接続できないようにMySQLインスタンスを設定することもできる。

SSL/TLS

https://developer.mozilla.org/ja/docs/Web/Security/Transport_Layer_Security

SSLあるいはTLS通信では、通信当事者の認証、通信内容の暗号化、通信内容の完全性の保証が行われている。

https://datatracker.ietf.org/doc/html/rfc8446

いま使われているTLS1.3の内容はRFC8446で宣言されている。

暗号化

暗号化は公開鍵暗号方式で行われている。 サーバー証明書には公開鍵の内容が含まれている。これは接続時にサーバーからクライアントに送信されるので事前にクライアントが持っておく必要はない。

通信当事者の認証

通信先のサーバーを信用するかどうかにserver-ca.pemが使われる。接続先を検証しないのであればserver-ca.pemはなくともよい。ただし安全のために検証はした方がいい。
また、接続元のクライアントが信用できるかをサーバーが検証するためにcleint-key.pemとclient-cert.pemが使われる。相互認証を必須とする場合はサーバーが発行したclient-key.pemとclient-cert.pemをクライアントが持っておく必要がある。