これは本当に私を困らせました...私は、Cobraと標準のhttpパッケージを使って基本的なサーバーをセットアップしようとしています。私は、証明書とキーを作成する方法についてはgolang例hereに従ってきましたが、関係なく、私はそれで投げる何、私はそれが通過すると、このエラーを取得維持するために取得しませんよ。Golang ListenAndServeTLSは私の証明書を受け取りません
Cannot serve on http port: crypto/tls: failed to find certificate PEM data in certificate input, but did find a private key; PEM inputs may have been switched
ので、私は、証明書を処理することができない私のプログラムで何かが間違っていなければならないという信念が残されています。
これは私がサーバーを起動するために私のフラグを解析するために使用するものである:
var serverCmd = &cobra.Command{
Use: "server",
Short: "start a compiler server",
Run: func(cmd *cobra.Command, args []string) {
addrUnsecure := ""
addrSecure := ""
addrUnsecure += ":" + strconv.FormatUint(serverPort, 10)
addrSecure += ":" + strconv.FormatUint(securePort, 10)
if noSSL {
addrSecure = ""
} else {
if secureOnly {
addrUnsecure = ""
}
if _, err := os.Stat(serverKey); os.IsNotExist(err) {
log.Error("Can't find ssl key %s. Use --no-ssl flag to disable", serverKey)
os.Exit(1)
}
if _, err := os.Stat(serverCert); os.IsNotExist(err) {
log.Error("Can't find ssl cert %s. Use --no-ssl flag to disable", serverCert)
os.Exit(1)
}
}
server.StartServer(addrUnsecure, addrSecure, serverCert, serverKey)
},
}
func addServerFlags() {
serverCmd.Flags().Uint64VarP(&serverPort, "port", "p", setServerPort(), "set the listening port for http")
serverCmd.Flags().Uint64VarP(&securePort, "secure-port", "s", setSecurePort(), "set the listening port for https")
serverCmd.Flags().BoolVarP(&noSSL, "no-ssl", "n", setSSL(), "use only http")
serverCmd.Flags().BoolVarP(&secureOnly, "secure-only", "o", setSecureOnly(), "use only https")
serverCmd.Flags().StringVarP(&serverCert, "cert", "c", setDefaultServerCert(), "set the https certificate")
serverCmd.Flags().StringVarP(&serverKey, "key", "k", setDefaultServerKey(), "set the key to interact with the https certificate")
}
func setServerPort() uint64 {
return 9099
}
func setSecurePort() uint64 {
return 9098
}
func setSSL() bool {
return false
}
func setSecureOnly() bool {
return false
}
func setDefaultServerCert() string {
return ""
}
func setDefaultServerKey() string {
return ""
}
と、これは実際のサーバーが開始された関数である。
func StartServer(addrUnsecure, addrSecure, key, cert string) {
log.Warn("Hello I'm the marmots' compilers server")
common.InitErisDir()
// Routes
http.HandleFunc("/", CompileHandler)
// Use SSL ?
log.Debug(cert)
if addrSecure != "" {
log.Debug("Using HTTPS")
log.WithField("=>", addrSecure).Debug("Listening on...")
if err := http.ListenAndServeTLS(addrUnsecure, cert, key, nil); err != nil {
log.Error("Cannot serve on http port: ", err)
os.Exit(1)
}
}
if addrUnsecure != "" {
log.Debug("Using HTTP")
log.WithField("=>", addrUnsecure).Debug("Listening on...")
if err := http.ListenAndServe(addrUnsecure, nil); err != nil {
log.Error("Cannot serve on http port: ", err)
os.Exit(1)
}
}
}
私はこの中を得ています両方のDockerはUbuntu 14.04とOS Xをローカルマシンで実行しています。誰でも私を助けてくれてありがとう。それは本当にシンプルなことでなければならないと思うので、私はここで私を得た何かばかなものになると思うので、それは恥ずかしいものです。
うわー...私は今信じられないほどダムを感じる。私が言ったように...おそらく何かばかな。ありがとう、トン。 –
すべてのコードを読むための名誉! – eduncan911