説明
TLS 1.0/1.1 などの古いプロトコルを許可すると、通信の保護が弱まる可能性があります。ただし、現在の Go の crypto/tls は MinVersion を省略しても TLS 1.2 を最小値にするため、省略だけで危険な接続とは判断できません。使用中の Go バージョンと環境設定を確認し、サービスに必要な最小 TLS バージョンを明示してください。
想定される影響
- 古いプロトコルや弱い暗号スイートで接続すると、機密情報の機密性や完全性が低下するおそれがあります。
- 実行環境の既定値や例外設定を確認しないと、組織が求める最小値と異なる動作になる可能性があります。
- 最小値を高くしすぎると必要なクライアントも接続できなくなるため、移行時には互換性の確認が必要です。
対処方法
crypto/tlsのtls.ConfigでMinVersion: tls.VersionTLS12以上を指定し、互換性があればtls.VersionTLS13を使ってください。- 古いブラウザーの対応など特別な事情がなければ、TLS 1.0/1.1 は使わないでください。必要な場合も別のサービスやドメインへ分離し、追加の監視とリスクの周知を検討してください。
- 組織の方針、ブラウザーやプラットフォームの対応状況、OWASP の指針、実行環境のリリースノートに照らして、TLS 設定を定期的に確認してください。
sslscan、nmap --script ssl-enum-ciphers、オンラインの TLS 検査ツールなどで、サービスが許可するプロトコルと暗号スイートを確認してください。
例
変更前
go
package main
import (
"crypto/tls"
"net/http"
)
func newInsecureServer() *http.Server {
// MinVersion を省略: 最小値は Go と環境設定に依存
// 現在の既定値は TLS 1.2
tlsConfig := &tls.Config{
// 他のオプションだけを設定し、MinVersion は省略
// CipherSuites や Certificates だけを設定した場合の例
}
return &http.Server{
Addr: ":8443",
TLSConfig: tlsConfig,
}
}
func main() {
srv := newInsecureServer()
// 証明書と鍵のパスは例
_ = srv.ListenAndServeTLS("server.crt", "server.key")
}
変更後
go
package main
import (
"crypto/tls"
"net/http"
)
func newSecureServer() *http.Server {
tlsConfig := &tls.Config{
// TLS 1.2 以上を明示的に要求
MinVersion: tls.VersionTLS12,
// 必要に応じて暗号スイートの制限などを追加
// CipherSuites: []uint16{ ... },
}
return &http.Server{
Addr: ":8443",
TLSConfig: tlsConfig,
}
}
func main() {
srv := newSecureServer()
// 証明書と鍵のパスは例
_ = srv.ListenAndServeTLS("server.crt", "server.key")
}
説明:
- 変更前:
MinVersionを省略し、実行環境の既定値を使います。現在の既定値は TLS 1.2 ですが、古い Go や環境固有の例外設定は別途確認が必要です。 - 変更後:
MinVersion: tls.VersionTLS12で最小値をコードに明示します。既に同じ既定値を使っていた場合、許可するバージョンは変わりません。証明書検証と TLS 1.2 の暗号スイートも確認してください。