ホームページ > バックエンド開発 > Golang > TLS と X. 証明書: デジタル パスポートと安全なトンネル、Go Crypto 7

TLS と X. 証明書: デジタル パスポートと安全なトンネル、Go Crypto 7

Linda Hamilton
リリース: 2024-11-21 03:42:16
オリジナル
761 人が閲覧しました

TLS and X. Certificates: Your Digital Passport and Secure Tunnel, Go Crypto 7

こんにちは、暗号探検家! TLS および X.509 証明書の世界に飛び込む準備はできていますか?これらはデジタル パスポートであり、インターネット旅行のための安全なトンネルであると考えてください。インターネット セキュリティのこの重要な側面をナビゲートするのに Go がどのように役立つかを見てみましょう!

X.509 証明書: デジタルパスポート

まず、X.509 証明書について話しましょう。これらは、インターネット上のエンティティの身元を証明するデジタル パスポートのようなものです。 Go でこれらをどのように操作できるかを見てみましょう:

デジタルパスポートを読む

X.509 証明書を読み取り、解析する方法は次のとおりです。

import (
    "crypto/x509"
    "encoding/pem"
    "fmt"
    "io/ioutil"
)

func main() {
    // Let's read our digital passport
    certPEM, err := ioutil.ReadFile("my_digital_passport.pem")
    if err != nil {
        panic("Oops! We lost our passport!")
    }

    // Decode the PEM block (it's like opening the passport)
    block, _ := pem.Decode(certPEM)
    if block == nil {
        panic("This doesn't look like a passport...")
    }

    // Parse the certificate (reading the passport details)
    cert, err := x509.ParseCertificate(block.Bytes)
    if err != nil {
        panic("We can't read this passport!")
    }

    // Let's see what's in our passport
    fmt.Printf("Passport owner: %s\n", cert.Subject)
    fmt.Printf("Passport issuer: %s\n", cert.Issuer)
    fmt.Printf("Valid from: %s\n", cert.NotBefore)
    fmt.Printf("Valid until: %s\n", cert.NotAfter)
}
ログイン後にコピー

独自のデジタルパスポート(自己署名証明書)を作成する

場合によっては、テスト用に独自のデジタルパスポートを作成する必要がある場合があります。その方法は次のとおりです:

import (
    "crypto/ecdsa"
    "crypto/elliptic"
    "crypto/rand"
    "crypto/x509"
    "crypto/x509/pkix"
    "encoding/pem"
    "math/big"
    "os"
    "time"
)

func main() {
    // Let's create our secret key
    privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    if err != nil {
        panic("Our key generator is feeling shy!")
    }

    // Now, let's fill out our passport application
    template := x509.Certificate{
        SerialNumber: big.NewInt(1),
        Subject: pkix.Name{
            Organization: []string{"Gopher's Cryptographic Adventures"},
        },
        NotBefore: time.Now(),
        NotAfter:  time.Now().Add(time.Hour * 24 * 180), // Valid for 180 days

        KeyUsage:              x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
        ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
        BasicConstraintsValid: true,
    }

    // Time to create our passport!
    derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &privateKey.PublicKey, privateKey)
    if err != nil {
        panic("The passport printer is jammed!")
    }

    // Let's save our new passport
    certOut, err := os.Create("my_new_passport.pem")
    if err != nil {
        panic("We can't save our new passport!")
    }
    pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
    certOut.Close()

    // And let's keep our secret key safe
    keyOut, err := os.Create("my_secret_key.pem")
    if err != nil {
        panic("We can't save our secret key!")
    }
    pem.Encode(keyOut, &pem.Block{Type: "EC PRIVATE KEY", Bytes: x509.MarshalECPrivateKey(privateKey)})
    keyOut.Close()

    fmt.Println("Congratulations! You've got a new digital passport!")
}
ログイン後にコピー

TLS: 安全なトンネル

デジタルパスポートを取得したので、それを使用してインターネット旅行用の安全なトンネルを作成しましょう。ここで TLS が登場します。

安全なサーバー (HTTPS サーバー) のセットアップ

デジタルパスポートを使用する安全なサーバーをセットアップする方法は次のとおりです:

import (
    "crypto/tls"
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Welcome to our secure tunnel!")
}

func main() {
    http.HandleFunc("/", handler)

    // Let's load our digital passport and secret key
    cert, err := tls.LoadX509KeyPair("my_new_passport.pem", "my_secret_key.pem")
    if err != nil {
        panic("We can't find our passport or secret key!")
    }

    // Now, let's set up our secure tunnel
    tlsConfig := &tls.Config{
        Certificates: []tls.Certificate{cert},
    }

    // Time to open our secure office
    server := &http.Server{
        Addr:      ":443",
        TLSConfig: tlsConfig,
    }

    // Let's start welcoming visitors!
    fmt.Println("Our secure office is open at https://localhost:443")
    err = server.ListenAndServeTLS("", "")
    if err != nil {
        panic("Oops! We couldn't open our office!")
    }
}
ログイン後にコピー

安全なクライアントの作成

次に、安全なサーバーにアクセスできるクライアントを作成しましょう:

import (
    "crypto/tls"
    "crypto/x509"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    // Let's load the passport of the server we want to visit
    certPool := x509.NewCertPool()
    pem, err := ioutil.ReadFile("server_passport.pem")
    if err != nil {
        panic("We can't find the server's passport!")
    }
    if !certPool.AppendCertsFromPEM(pem) {
        panic("This doesn't look like a valid passport...")
    }

    // Now, let's prepare for our secure journey
    tlsConfig := &tls.Config{
        RootCAs: certPool,
    }

    // Time to create our secure transport
    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: tlsConfig,
        },
    }

    // Let's visit the secure server!
    resp, err := client.Get("https://example.com")
    if err != nil {
        panic("Our secure journey failed!")
    }
    defer resp.Body.Close()

    // What did the server say?
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic("We couldn't understand the server's message!")
    }
    fmt.Printf("The server says: %s\n", body)
}
ログイン後にコピー

デジタルパスポートと安全なトンネルの黄金律

デジタル パスポートと安全なトンネルのマスターになったので、心に留めておくべきいくつかの黄金律を以下に示します。

  1. 常に最新モデルを使用する: TLS 1.2 以降を使用します。古いモデルには重大なセキュリティ上の欠陥がいくつかあります。

  2. パスポートを注意深く確認してください: 証明書は常に適切に検証してください。名前、有効期限、すべてを確認してください!

  3. 信頼できる認証局からパスポートを取得します: 実際に使用する場合は、信頼できる認証局から証明書を取得します。自己署名証明書はテストには最適ですが、運用環境には適していません。

  4. これらの証明書を固定する: 超秘密操作の場合は、証明書の固定を実装します。これは、信頼できる特定の TSA 職員にパスポートを検査してもらうようなものです。

  5. パスポートを定期的に更新してください: 証明書とキーを更新してローテーションします。有効期限が切れるまで待ってはいけません!

  6. 高品質のインクを使用します: すべての暗号化操作には常に安全な乱数生成を使用してください。

  7. 秘密鍵は秘密にしてください: 秘密鍵をログやエラー メッセージに決して公開しないでください。それはあなたのパスワードを世界にブロードキャストするようなものです!

  8. 問題を適切に処理します: すべての TLS 操作に対して適切なエラー処理を実装します。小さな問題がセキュリティ上の災害に発展しないようにしてください。

  9. パスポートの自動更新を検討してください: 証明書の管理を容易にするために Let's Encrypt などのツールを検討してください。パスポートを自動更新してくれるサービスのようなものです!

次は何ですか?

おめでとうございます!これで、デジタル パスポートと安全なトンネルの技術を習得できました。これらは、データがインターネット上を移動するときにデータを安全に保つために非常に重要です。

暗号の世界では、これらの基本を理解することが重要であることを覚えておいてください。それは、デジタル世界で安全に旅行するために不可欠な、海外旅行のルールを学ぶようなものです。これらをマスターすれば、Go で安全な認証済みアプリケーションを作成できるようになります。

それでは、安全な Web サーバーをセットアップしてみてはどうでしょうか?それとも、既存の HTTPS サービスと安全に通信できるクライアントを作成しますか?安全なインターネット通信の世界があなたのすぐそばにあります。コーディングを楽しんでください、暗号化チャンピオン!

以上がTLS と X. 証明書: デジタル パスポートと安全なトンネル、Go Crypto 7の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート