Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 18643] ファイルの概要

このコミットは、Go 1.3のリリースノートドキュメント(doc/go1.3.txt)に対する更新です。具体的には、crypto/tlsパッケージとcrypto/x509パッケージにおける2つの重要な変更点を追記しています。このコミット自体はコードの機能変更ではなく、既存の機能変更を文書化するものです。

コミット

doc/go1.3: note a couple more crypto changes.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/68600043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/abe53f8766408c05aa9b3557105c416434acbdc4

元コミット内容

--- a/doc/go1.3.txt
+++ b/doc/go1.3.txt
@@ -10,4 +10,6 @@ cmd/go, go/build: support .m files (CL 60590044)
 unicode: upgrade from Unicode 6.2.0 to 6.3.0 (CL 65400044)
 runtime/debug: add SetPanicOnFault (CL 66590044)
 crypto/tls: ServerName or InsecureSkipVerify (CL 67010043)
+crypto/tls: report TLS version in ConnectionState (CL 68250043)
+crypto/x509: support CSRs (CL 49830048)
 cmd/go: add -exec to 'go run' and 'go test' (CL 68580043)

変更の背景

Go言語は継続的に進化しており、新しい機能の追加、パフォーマンスの改善、セキュリティの強化が定期的に行われます。これらの変更は、ユーザーがGoの新しいバージョンにアップグレードする際に、何が変更されたのか、どのような新機能が利用可能になったのかを理解できるように、公式ドキュメントに記録される必要があります。

このコミットは、Go 1.3のリリースに向けたドキュメントの準備の一環として行われました。特に、暗号化(crypto)関連のパッケージにおける2つの重要な変更、すなわちTLS接続の状態報告の改善と、X.509証明書署名リクエスト(CSR)のサポート追加を、ユーザーが認識できるようにリリースノートに明記することが目的でした。これにより、開発者はこれらの新機能を活用したり、既存のコードベースが影響を受ける可能性を評価したりすることができます。

前提知識の解説

このコミットの変更内容を理解するためには、以下の前提知識が役立ちます。

Go言語のリリースサイクルとドキュメント

Go言語は、通常6ヶ月ごとにメジャーリリースを行います。各リリースでは、言語仕様の変更、標準ライブラリの更新、ツールチェインの改善など、多岐にわたる変更が含まれます。これらの変更は、doc/goX.Y.txtのようなファイルにまとめられ、リリースノートとして公開されます。このファイルは、Goの新しいバージョンで何が変更されたかを開発者に伝えるための主要な情報源となります。

TLS (Transport Layer Security)

TLSは、インターネット上で安全な通信を行うための暗号化プロトコルです。ウェブブラウジング(HTTPS)、電子メール、VoIPなど、多くのアプリケーションで利用されています。TLSは、通信の盗聴、改ざん、なりすましを防ぐための機能を提供します。

Goのcrypto/tlsパッケージは、TLSプロトコルを実装しており、Goアプリケーションで安全なネットワーク通信を確立するために使用されます。TLSハンドシェイク中に、クライアントとサーバーは互いに認証し、暗号化アルゴリズムと鍵をネゴシエートします。

X.509証明書とCSR (Certificate Signing Request)

X.509は、公開鍵証明書の標準フォーマットです。TLS通信において、サーバー(およびオプションでクライアント)の身元を証明するために使用されます。X.509証明書は、認証局(CA)によって発行され、公開鍵、所有者の識別情報、CAの署名などが含まれます。

CSR(Certificate Signing Request)は、公開鍵証明書を要求する際に使用されるメッセージフォーマットです。証明書を申請するエンティティ(例:ウェブサーバーの管理者)は、自身の公開鍵と識別情報(ドメイン名、組織名など)を含むCSRを生成し、それを認証局に送付します。認証局はCSRの内容を検証し、問題がなければその公開鍵に対するX.509証明書を発行します。CSRは通常、PKCS#10標準に従ってフォーマットされます。

技術的詳細

このコミット自体はドキュメントの変更ですが、それが言及している2つの変更は、Goの暗号化機能における重要な進歩を示しています。

  1. crypto/tls: report TLS version in ConnectionState (CL 68250043)

    • 変更内容: この変更により、crypto/tlsパッケージのConnectionState構造体に、確立されたTLS接続のバージョンを報告するフィールドが追加されました。
    • 技術的背景: TLSプロトコルには、TLS 1.0、1.1、1.2、1.3といった複数のバージョンが存在します。各バージョンは、セキュリティ機能やパフォーマンス特性が異なります。例えば、TLS 1.2は広く使用されており、TLS 1.3はより新しいバージョンで、セキュリティと効率が向上しています。
    • 影響と利点: 以前は、Goのアプリケーションが確立されたTLS接続の正確なバージョンをプログラム的に取得することは困難でした。この機能が追加されたことで、アプリケーションは現在使用されているTLSバージョンを簡単に確認できるようになります。これは、セキュリティ監査、デバッグ、または特定のTLSバージョンに依存するロジックの実装において非常に有用です。例えば、古いTLSバージョン(例: TLS 1.0/1.1)の使用を検出して警告を発したり、特定のセキュリティポリシーを強制したりすることが可能になります。
  2. crypto/x509: support CSRs (CL 49830048)

    • 変更内容: この変更により、crypto/x509パッケージにCSR(Certificate Signing Request)を生成および解析するための機能が追加されました。
    • 技術的背景: 以前のGoのcrypto/x509パッケージは、主にX.509証明書の解析と検証に焦点を当てていました。しかし、証明書を発行してもらうためには、まずCSRを生成し、それを認証局に提出する必要があります。このプロセスは、ウェブサーバーのSSL/TLS証明書取得など、多くのシナリオで不可欠です。
    • 影響と利点: この機能の追加により、Goアプリケーション内で直接CSRを生成できるようになりました。これにより、外部ツール(例: OpenSSLコマンドラインツール)に依存することなく、証明書管理のワークフロー全体をGoで完結させることが可能になります。例えば、自動化された証明書プロビジョニングシステムや、内部CA(認証局)をGoで構築する際に、この機能は非常に役立ちます。CSRの生成には、公開鍵と、証明書に含める識別情報(Common Name, Organization, Countryなど)が必要です。また、CSRの解析機能は、受け取ったCSRの内容を検証したり、そこから公開鍵を抽出したりする際に利用できます。

これらの変更は、Goがネットワークセキュリティと暗号化の分野でより強力で柔軟なツールを提供し続けるというコミットメントを反映しています。

コアとなるコードの変更箇所

このコミット自体は、Goのソースコードではなく、Go 1.3のリリースノートドキュメントであるdoc/go1.3.txtファイルのみを変更しています。

具体的には、以下の2行が追加されました。

--- a/doc/go1.3.txt
+++ b/doc/go1.3.txt
@@ -10,4 +10,6 @@ cmd/go, go/build: support .m files (CL 60590044)
 unicode: upgrade from Unicode 6.2.0 to 6.3.0 (CL 65400044)
 runtime/debug: add SetPanicOnFault (CL 66590044)
 crypto/tls: ServerName or InsecureSkipVerify (CL 67010043)
+crypto/tls: report TLS version in ConnectionState (CL 68250043)
+crypto/x509: support CSRs (CL 49830048)
 cmd/go: add -exec to 'go run' and 'go test' (CL 68580043)

コアとなるコードの解説

このコミットには、Goの機能的なコード変更は含まれていません。これは純粋にドキュメントの更新であり、Go 1.3のリリースノートに、以前にコミットされた2つの暗号化関連の変更点を追記するものです。

したがって、このコミット自体に「コアとなるコードの解説」は適用されません。解説すべきは、このドキュメントコミットが参照している、以下の2つの変更です。

  1. CL 68250043 (crypto/tls: report TLS version in ConnectionState): この変更は、crypto/tlsパッケージ内のConnectionState構造体に、Versionという新しいフィールドを追加しました。このフィールドは、確立されたTLS接続のプロトコルバージョン(例: tls.VersionTLS10, tls.VersionTLS12, tls.VersionTLS13など)を保持します。これにより、アプリケーションはTLSハンドシェイクが完了した後、実際にどのTLSバージョンがネゴシエートされたかをプログラム的に確認できるようになりました。

  2. CL 49830048 (crypto/x509: support CSRs): この変更は、crypto/x509パッケージに、X.509証明書署名リクエスト(CSR)を扱うための新しい関数と型を追加しました。具体的には、CSRを生成するためのCreateCertificateRequest関数や、既存のCSRを解析するためのParseCertificateRequest関数などが含まれます。これにより、Goアプリケーションは、証明書の発行プロセスにおいて、CSRの生成と処理を直接行うことができるようになりました。

これらの変更は、Goの標準ライブラリが提供する暗号化機能の範囲を広げ、より高度なセキュリティ関連のタスクをGoネイティブで実行できるようにするものです。

関連リンク

  • Go 1.3 Release Notes: Go 1.3の公式リリースノートは、このコミットが更新しているドキュメントの最終版です。Goの公式ウェブサイトで公開されています。
  • Goのcrypto/tlsパッケージドキュメント: https://pkg.go.dev/crypto/tls
  • Goのcrypto/x509パッケージドキュメント: https://pkg.go.dev/crypto/x509

参考にした情報源リンク