mirror of
https://github.com/duanhf2012/origin.git
synced 2026-03-01 10:44:50 +08:00
对https与websocket支持多证书
This commit is contained in:
@@ -323,7 +323,6 @@ func (slf *CCluster) Go(bCast bool, NodeServiceMethod string, args interface{},
|
|||||||
if replyCall.Error != nil {
|
if replyCall.Error != nil {
|
||||||
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "CCluster.Go(%s) fail:%v.", NodeServiceMethod, replyCall.Error)
|
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "CCluster.Go(%s) fail:%v.", NodeServiceMethod, replyCall.Error)
|
||||||
}
|
}
|
||||||
return replyCall.Error
|
|
||||||
} else {
|
} else {
|
||||||
pclient := slf.GetClusterClient(nodeid)
|
pclient := slf.GetClusterClient(nodeid)
|
||||||
if pclient == nil {
|
if pclient == nil {
|
||||||
@@ -334,7 +333,6 @@ func (slf *CCluster) Go(bCast bool, NodeServiceMethod string, args interface{},
|
|||||||
if replyCall.Error != nil {
|
if replyCall.Error != nil {
|
||||||
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "CCluster.Go(%s) fail:%v.", NodeServiceMethod, replyCall.Error)
|
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "CCluster.Go(%s) fail:%v.", NodeServiceMethod, replyCall.Error)
|
||||||
}
|
}
|
||||||
return replyCall.Error
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package network
|
package network
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@@ -10,6 +11,11 @@ import (
|
|||||||
"github.com/duanhf2012/origin/sysmodule"
|
"github.com/duanhf2012/origin/sysmodule"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type CA struct {
|
||||||
|
certfile string
|
||||||
|
keyfile string
|
||||||
|
}
|
||||||
|
|
||||||
type HttpServer struct {
|
type HttpServer struct {
|
||||||
port uint16
|
port uint16
|
||||||
|
|
||||||
@@ -18,8 +24,7 @@ type HttpServer struct {
|
|||||||
writetimeout time.Duration
|
writetimeout time.Duration
|
||||||
|
|
||||||
httpserver *http.Server
|
httpserver *http.Server
|
||||||
certfile string
|
caList []CA
|
||||||
keyfile string
|
|
||||||
|
|
||||||
ishttps bool
|
ishttps bool
|
||||||
}
|
}
|
||||||
@@ -41,17 +46,35 @@ func (slf *HttpServer) Start() {
|
|||||||
|
|
||||||
func (slf *HttpServer) startListen() error {
|
func (slf *HttpServer) startListen() error {
|
||||||
listenPort := fmt.Sprintf(":%d", slf.port)
|
listenPort := fmt.Sprintf(":%d", slf.port)
|
||||||
|
|
||||||
|
var tlscatList []tls.Certificate
|
||||||
|
var tlsConfig *tls.Config
|
||||||
|
for _, cadata := range slf.caList {
|
||||||
|
cer, err := tls.LoadX509KeyPair(cadata.certfile, cadata.keyfile)
|
||||||
|
if err != nil {
|
||||||
|
service.GetLogger().Printf(sysmodule.LEVER_FATAL, "load CA [%s]-[%s] file is error :%s", cadata.certfile, cadata.keyfile, err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
tlscatList = append(tlscatList, cer)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(tlscatList) > 0 {
|
||||||
|
tlsConfig = &tls.Config{Certificates: tlscatList}
|
||||||
|
}
|
||||||
|
|
||||||
slf.httpserver = &http.Server{
|
slf.httpserver = &http.Server{
|
||||||
Addr: listenPort,
|
Addr: listenPort,
|
||||||
Handler: slf.handler,
|
Handler: slf.handler,
|
||||||
ReadTimeout: 10 * time.Second,
|
ReadTimeout: 10 * time.Second,
|
||||||
WriteTimeout: 10 * time.Second,
|
WriteTimeout: 10 * time.Second,
|
||||||
MaxHeaderBytes: 1 << 20,
|
MaxHeaderBytes: 1 << 20,
|
||||||
|
TLSConfig: tlsConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
if slf.ishttps == true {
|
if slf.ishttps == true {
|
||||||
err = slf.httpserver.ListenAndServeTLS(slf.certfile, slf.keyfile)
|
err = slf.httpserver.ListenAndServeTLS("", "")
|
||||||
} else {
|
} else {
|
||||||
err = slf.httpserver.ListenAndServe()
|
err = slf.httpserver.ListenAndServe()
|
||||||
}
|
}
|
||||||
@@ -66,8 +89,10 @@ func (slf *HttpServer) startListen() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (slf *HttpServer) SetHttps(certfile string, keyfile string) bool {
|
func (slf *HttpServer) SetHttps(certfile string, keyfile string) bool {
|
||||||
slf.certfile = certfile
|
if certfile == "" || keyfile == "" {
|
||||||
slf.keyfile = keyfile
|
return false
|
||||||
|
}
|
||||||
|
slf.caList = append(slf.caList, CA{certfile, keyfile})
|
||||||
slf.ishttps = true
|
slf.ishttps = true
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package network
|
package network
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -31,6 +32,7 @@ type IMessageReceiver interface {
|
|||||||
OnDisconnect(clientid uint64, err error)
|
OnDisconnect(clientid uint64, err error)
|
||||||
OnRecvMsg(clientid uint64, msgtype int, data []byte)
|
OnRecvMsg(clientid uint64, msgtype int, data []byte)
|
||||||
OnHandleHttp(w http.ResponseWriter, r *http.Request)
|
OnHandleHttp(w http.ResponseWriter, r *http.Request)
|
||||||
|
IsInit() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type Reciver struct {
|
type Reciver struct {
|
||||||
@@ -65,9 +67,9 @@ type WebsocketServer struct {
|
|||||||
httpserver *http.Server
|
httpserver *http.Server
|
||||||
reciver map[string]Reciver
|
reciver map[string]Reciver
|
||||||
|
|
||||||
certfile string
|
caList []CA
|
||||||
keyfile string
|
|
||||||
iswss bool
|
iswss bool
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -114,17 +116,34 @@ func (slf *WebsocketServer) SetupReciver(pattern string, messageReciver IMessage
|
|||||||
func (slf *WebsocketServer) startListen() {
|
func (slf *WebsocketServer) startListen() {
|
||||||
listenPort := fmt.Sprintf(":%d", slf.port)
|
listenPort := fmt.Sprintf(":%d", slf.port)
|
||||||
|
|
||||||
|
var tlscatList []tls.Certificate
|
||||||
|
var tlsConfig *tls.Config
|
||||||
|
for _, cadata := range slf.caList {
|
||||||
|
cer, err := tls.LoadX509KeyPair(cadata.certfile, cadata.keyfile)
|
||||||
|
if err != nil {
|
||||||
|
service.GetLogger().Printf(sysmodule.LEVER_FATAL, "load CA %s-%s file is error :%s", cadata.certfile, cadata.keyfile, err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
tlscatList = append(tlscatList, cer)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(tlscatList) > 0 {
|
||||||
|
tlsConfig = &tls.Config{Certificates: tlscatList}
|
||||||
|
}
|
||||||
|
|
||||||
slf.httpserver = &http.Server{
|
slf.httpserver = &http.Server{
|
||||||
Addr: listenPort,
|
Addr: listenPort,
|
||||||
Handler: slf.initRouterHandler(),
|
Handler: slf.initRouterHandler(),
|
||||||
ReadTimeout: 10 * time.Second,
|
ReadTimeout: 10 * time.Second,
|
||||||
WriteTimeout: 10 * time.Second,
|
WriteTimeout: 10 * time.Second,
|
||||||
MaxHeaderBytes: 1 << 20,
|
MaxHeaderBytes: 1 << 20,
|
||||||
|
TLSConfig: tlsConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
if slf.iswss == true {
|
if slf.iswss == true {
|
||||||
err = slf.httpserver.ListenAndServeTLS(slf.certfile, slf.keyfile)
|
err = slf.httpserver.ListenAndServeTLS("", "")
|
||||||
} else {
|
} else {
|
||||||
err = slf.httpserver.ListenAndServe()
|
err = slf.httpserver.ListenAndServe()
|
||||||
}
|
}
|
||||||
@@ -244,7 +263,9 @@ func (slf *WebsocketServer) initRouterHandler() http.Handler {
|
|||||||
r := mux.NewRouter()
|
r := mux.NewRouter()
|
||||||
|
|
||||||
for pattern, reciver := range slf.reciver {
|
for pattern, reciver := range slf.reciver {
|
||||||
r.HandleFunc(pattern, reciver.messageReciver.OnHandleHttp)
|
if reciver.messageReciver.IsInit() == true {
|
||||||
|
r.HandleFunc(pattern, reciver.messageReciver.OnHandleHttp)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cors := cors.AllowAll()
|
cors := cors.AllowAll()
|
||||||
@@ -252,8 +273,10 @@ func (slf *WebsocketServer) initRouterHandler() http.Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (slf *WebsocketServer) SetWSS(certfile string, keyfile string) bool {
|
func (slf *WebsocketServer) SetWSS(certfile string, keyfile string) bool {
|
||||||
slf.certfile = certfile
|
if certfile == "" || keyfile == "" {
|
||||||
slf.keyfile = keyfile
|
return false
|
||||||
|
}
|
||||||
|
slf.caList = append(slf.caList, CA{certfile, keyfile})
|
||||||
slf.iswss = true
|
slf.iswss = true
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user