http 和 https_Golang设置https访问,以及http如何重定向到https
設置https訪問:
初始代碼為http監聽:
func main() { server := &http.Server{ Addr: ":8080", ... } go func() { if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf(err, "Listen: %s") } }() ...}變為https監聽:
func main() { server := &http.Server{ Addr: ":8080", ... } go func() { if err := server.ListenAndServeTLS("conf/server.crt", "conf/server.key"); err != nil && err != http.ErrServerClosed { log.Fatalf(err, "Listen: %s") } }() ...}其中ListenAndServeTLS方法的兩個參數為SSL證書的下載文件,網上有專門生成證書的命令或工具,這種情況得到的證書,雖然可以訪問https,但證書無效,瀏覽器地址欄提示不安全。
騰訊云可以免費申請SSL證書,但需要對填寫的域名進行驗證,如果不是騰訊云的域名,還需要去域名對應解析商進行驗證,所以最好使騰訊云的域名。
新用戶在騰訊云花1塊錢買了個域名,自帶SSL證書,域名審核通過后,申請免費SSL證書,填寫該域名,選擇自動DNS驗證,驗證通過后,即可下載證書。從下載內容Apache文件夾中取出一個.crt文件和.key文件存放本地,作為server.ListenAndServeTLS()函數的兩個參數,參數傳文件路徑即可。
此時啟動項目,訪問:https://localhost:8080 可行,訪問:http://localhost:8080 不可行。
https訪問,提示不安全,證書無效:
如圖:
這種情況,只需把ip替換成證書對應的域名即可,前提是域名已經和你的服務器ip進行了解析。這里我用剛申請的域名和我本地電腦ip進行了解析,用域名進行訪問后,顯示正常,不再提示不安全:
http重定向到https:
此處結合Gin框架處理,http重定向到https,用到第三方包:
go get github.com/unrolled/secure利用secure包寫一個中間件,設置http重定向到https具體哪個url上:
//設置http重定向到httpsfunc TlsHandler() gin.HandlerFunc { return func(c *gin.Context) { secureMiddleware := secure.New(secure.Options{ SSLRedirect: true, SSLHost: "dubinyang.xyz:8081", }) err := secureMiddleware.Process(c.Writer, c.Request) if err != nil { return } c.Next() }}main函數里同時監聽http和https:
func main() { g:= gin.Default() //加載中間件 g.Use(TlsHandler()) server := &http.Server{ Addr: ":8080", ... } //監聽http go func() { if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf(err, "Listen: %s") } }() //監聽https go func() { //端口不可重復監聽 //此處更換8080端口為8081,直接用gin的RunTLS()函數進行監聽 //繼續用server的ListenAndServeTLS()函數效果一樣,建server2,Addr變為為":8081"即可 if err := g.RunTLS(":8081", "conf/server.crt", "conf/server.key"); err != nil && err != http.ErrServerClosed { log.Fatalf(err, "Listen: %s") } }() ...}如果http監聽80端口,https監聽443端口,兩個端口都可隱藏,重定向時地址欄不會顯示端口變化。
微信公眾號:李田路口
總結
以上是生活随笔為你收集整理的http 和 https_Golang设置https访问,以及http如何重定向到https的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jmeter生成html报告修改,Jme
- 下一篇: 弱引用使用场景桌面_面试|再次讲解Thr