Przeglądaj źródła

refine cert config in http

v2ray 9 lat temu
rodzic
commit
301b0ccff7
2 zmienionych plików z 32 dodań i 8 usunięć
  1. 9 3
      proxy/http/config.go
  2. 23 5
      proxy/http/config_json.go

+ 9 - 3
proxy/http/config.go

@@ -1,13 +1,19 @@
 package http
 
 import (
+	"crypto/tls"
+
 	v2net "github.com/v2ray/v2ray-core/common/net"
 )
 
+type CertificateConfig struct {
+	Domain      string
+	Certificate tls.Certificate
+}
+
 type TlsConfig struct {
-	Enabled  bool
-	CertFile string
-	KeyFile  string
+	Enabled bool
+	Certs   []*CertificateConfig
 }
 
 type Config struct {

+ 23 - 5
proxy/http/config_json.go

@@ -3,17 +3,36 @@
 package http
 
 import (
+	"crypto/tls"
 	"encoding/json"
 
 	v2net "github.com/v2ray/v2ray-core/common/net"
 	"github.com/v2ray/v2ray-core/proxy/internal/config"
 )
 
+func (this *CertificateConfig) UnmarshalJSON(data []byte) error {
+	type JsonConfig struct {
+		Domain   string `json:"domain"`
+		CertFile string `json:"cert"`
+		KeyFile  string `json:"key"`
+	}
+	jsonConfig := new(JsonConfig)
+	if err := json.Unmarshal(data, jsonConfig); err != nil {
+		return err
+	}
+
+	cert, err := tls.LoadX509KeyPair(jsonConfig.CertFile, jsonConfig.KeyFile)
+	if err != nil {
+		return err
+	}
+	this.Domain = jsonConfig.Domain
+	this.Certificate = cert
+}
+
 func (this *TlsConfig) UnmarshalJSON(data []byte) error {
 	type JsonConfig struct {
-		Enabled  bool
-		CertFile string
-		KeyFile  string
+		Enabled bool                 `json:"enable"`
+		Certs   []*CertificateConfig `json:"certs"`
 	}
 	jsonConfig := new(JsonConfig)
 	if err := json.Unmarshal(data, jsonConfig); err != nil {
@@ -21,8 +40,7 @@ func (this *TlsConfig) UnmarshalJSON(data []byte) error {
 	}
 
 	this.Enabled = jsonConfig.Enabled
-	this.CertFile = jsonConfig.CertFile
-	this.KeyFile = jsonConfig.KeyFile
+	this.Certs = jsonConfig.Certs
 	return nil
 }