私は https://www.kaihag.com/https-and-go/ を読んでいて、ComodoからSSL証明書を購入し、.Zip
ファイルをメールで送ってきました。これまでのところ、すべてのファイルは次のようになります
csr.pem
private-key.pem
website.com.crt
website.com.ca-bundle
website.com.Zip
上記のウェブサイトは、私が持っていない3つの.pem
ファイルを連結することを望んでいます。ところで、.pem
ファイルを連結する必要がある理由は何ですか?変更されていない上記のファイルを使用して、golang Webサーバーでhttpsを設定するにはどうすればよいですか?
https://golang.org/pkg/net/http/#ListenAndServeTLS を使用します
http.HandleFunc("/", handler)
log.Printf("About to listen on 10443. Go to https://127.0.0.1:10443/")
err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
log.Fatal(err)
これは実際には問題ではありませんが、コンピューターはルート証明書のみを格納するため、中間証明書が必要です。それらを連結することで、すべてを1つのファイルに入れて、ブラウザーがすべての証明書を取得するようにします。これは必須のステップです。そうしないと、サーバーが特定のデバイスで失敗します。証明書プロバイダーは、これを行うための指示を提供します。はじめに、1つの証明書ファイルと1つの秘密鍵ファイルが必要です。
https://kb.wisc.edu/page.php?id=1892
証明書を組み合わせるには、次のようなcatを使用できます(ファイルの最後に改行があることを確認してください)。
cat example.com.ca-crt example.com.ca-bundle > example.com.crt
http.ListenAndServeTLS
が必要です
package main
import (
// "fmt"
// "io"
"net/http"
"log"
)
func HelloServer(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("This is an example server.\n"))
// fmt.Fprintf(w, "This is an example server.\n")
// io.WriteString(w, "This is an example server.\n")
}
func main() {
http.HandleFunc("/hello", HelloServer)
err := http.ListenAndServeTLS(":443", "server.crt", "server.key", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
これがスニペットです: https://Gist.github.com/denji/12b3a568f092ab951456
ここに私の発見があります。利用可能なすべてのインストールガイドはGolang Webサーバー用ではなく、NginxとApache HTTP構成用だったので数時間かかったので、共有したいと思います。
環境:
問題:
解決:
解決策は、テキストエディタを使用して以下の証明書を連結し、好きな名前を付けることです。 「my_domain.txt」という名前で保存しました。
次に、このように実行します。
router.RunTLS(":"+os.Getenv("PORT"), "../my_domain.txt", "../my_private_key.txt")
お役に立てば幸いです。