Browse Source

fix: parse ssl certificate error #270

0xJacky 1 year ago
parent
commit
371472e67b

+ 3 - 3
api/certificate/certificate.go

@@ -25,7 +25,7 @@ func Transformer(certModel *model.Cert) (certificate *APICertificate) {
 	if certModel.SSLCertificatePath != "" {
 	if certModel.SSLCertificatePath != "" {
 		if _, err := os.Stat(certModel.SSLCertificatePath); err == nil {
 		if _, err := os.Stat(certModel.SSLCertificatePath); err == nil {
 			sslCertificationBytes, _ = os.ReadFile(certModel.SSLCertificatePath)
 			sslCertificationBytes, _ = os.ReadFile(certModel.SSLCertificatePath)
-			if !cert.IsPublicKey(string(sslCertificationBytes)) {
+			if !cert.IsCertificate(string(sslCertificationBytes)) {
 				sslCertificationBytes = []byte{}
 				sslCertificationBytes = []byte{}
 			}
 			}
 		}
 		}
@@ -77,9 +77,9 @@ func GetCert(c *gin.Context) {
 
 
 type certJson struct {
 type certJson struct {
 	Name                  string `json:"name" binding:"required"`
 	Name                  string `json:"name" binding:"required"`
-	SSLCertificatePath    string `json:"ssl_certificate_path" binding:"required,publickey_path"`
+	SSLCertificatePath    string `json:"ssl_certificate_path" binding:"required,certificate_path"`
 	SSLCertificateKeyPath string `json:"ssl_certificate_key_path" binding:"required,privatekey_path"`
 	SSLCertificateKeyPath string `json:"ssl_certificate_key_path" binding:"required,privatekey_path"`
-	SSLCertificate        string `json:"ssl_certificate" binding:"omitempty,publickey"`
+	SSLCertificate        string `json:"ssl_certificate" binding:"omitempty,certificate"`
 	SSLCertificateKey     string `json:"ssl_certificate_key" binding:"omitempty,privatekey"`
 	SSLCertificateKey     string `json:"ssl_certificate_key" binding:"omitempty,privatekey"`
 	ChallengeMethod       string `json:"challenge_method"`
 	ChallengeMethod       string `json:"challenge_method"`
 	DnsCredentialID       int    `json:"dns_credential_id"`
 	DnsCredentialID       int    `json:"dns_credential_id"`

+ 2 - 2
app/src/views/certificate/CertificateEditor.vue

@@ -164,7 +164,7 @@ const isManaged = computed(() => {
             :label="$gettext('SSL Certificate Path')"
             :label="$gettext('SSL Certificate Path')"
             :validate-status="errors.ssl_certificate_path ? 'error' : ''"
             :validate-status="errors.ssl_certificate_path ? 'error' : ''"
             :help="errors.ssl_certificate_path === 'required' ? $gettext('This field is required')
             :help="errors.ssl_certificate_path === 'required' ? $gettext('This field is required')
-              : errors.ssl_certificate_path === 'publickey_path'
+              : errors.ssl_certificate_path === 'certificate_path'
                 ? $gettext('The path exists, but the file is not a public key') : ''"
                 ? $gettext('The path exists, but the file is not a public key') : ''"
           >
           >
             <p v-if="isManaged">
             <p v-if="isManaged">
@@ -193,7 +193,7 @@ const isManaged = computed(() => {
           <AFormItem
           <AFormItem
             :label="$gettext('SSL Certificate Content')"
             :label="$gettext('SSL Certificate Content')"
             :validate-status="errors.ssl_certificate ? 'error' : ''"
             :validate-status="errors.ssl_certificate ? 'error' : ''"
-            :help="errors.ssl_certificate === 'publickey'
+            :help="errors.ssl_certificate === 'certificate'
               ? $gettext('The input is not a SSL Certificate') : ''"
               ? $gettext('The input is not a SSL Certificate') : ''"
           >
           >
             <CodeEditor
             <CodeEditor

+ 5 - 6
internal/cert/helper.go

@@ -6,13 +6,12 @@ import (
 	"os"
 	"os"
 )
 )
 
 
-func IsPublicKey(pemStr string) bool {
+func IsCertificate(pemStr string) bool {
 	block, _ := pem.Decode([]byte(pemStr))
 	block, _ := pem.Decode([]byte(pemStr))
 	if block == nil {
 	if block == nil {
 		return false
 		return false
 	}
 	}
-
-	_, err := x509.ParsePKIXPublicKey(block.Bytes)
+	_, err := x509.ParseCertificate(block.Bytes)
 	return err == nil
 	return err == nil
 }
 }
 
 
@@ -31,8 +30,8 @@ func IsPrivateKey(pemStr string) bool {
 	return errECDSA == nil
 	return errECDSA == nil
 }
 }
 
 
-// IsPublicKeyPath checks if the file at the given path is a public key or not exists.
-func IsPublicKeyPath(path string) bool {
+// IsCertificatePath checks if the file at the given path is a certificate or not exists.
+func IsCertificatePath(path string) bool {
 	if path == "" {
 	if path == "" {
 		return false
 		return false
 	}
 	}
@@ -50,7 +49,7 @@ func IsPublicKeyPath(path string) bool {
 		return false
 		return false
 	}
 	}
 
 
-	return IsPublicKey(string(bytes))
+	return IsCertificate(string(bytes))
 }
 }
 
 
 // IsPrivateKeyPath checks if the file at the given path is a private key or not exists.
 // IsPrivateKeyPath checks if the file at the given path is a private key or not exists.

+ 4 - 4
internal/validation/certificate.go

@@ -5,16 +5,16 @@ import (
 	val "github.com/go-playground/validator/v10"
 	val "github.com/go-playground/validator/v10"
 )
 )
 
 
-func isPublicKey(fl val.FieldLevel) bool {
-	return cert.IsPublicKey(fl.Field().String())
+func isCertificate(fl val.FieldLevel) bool {
+	return cert.IsCertificate(fl.Field().String())
 }
 }
 
 
 func isPrivateKey(fl val.FieldLevel) bool {
 func isPrivateKey(fl val.FieldLevel) bool {
 	return cert.IsPrivateKey(fl.Field().String())
 	return cert.IsPrivateKey(fl.Field().String())
 }
 }
 
 
-func isPublicKeyPath(fl val.FieldLevel) bool {
-	return cert.IsPublicKeyPath(fl.Field().String())
+func isCertificatePath(fl val.FieldLevel) bool {
+	return cert.IsCertificatePath(fl.Field().String())
 }
 }
 
 
 func isPrivateKeyPath(fl val.FieldLevel) bool {
 func isPrivateKeyPath(fl val.FieldLevel) bool {

+ 2 - 2
internal/validation/validation.go

@@ -18,7 +18,7 @@ func Init() {
 		logger.Fatal(err)
 		logger.Fatal(err)
 	}
 	}
 
 
-	err = v.RegisterValidation("publickey", isPublicKey)
+	err = v.RegisterValidation("certificate", isCertificate)
 
 
 	if err != nil {
 	if err != nil {
 		logger.Fatal(err)
 		logger.Fatal(err)
@@ -30,7 +30,7 @@ func Init() {
 		logger.Fatal(err)
 		logger.Fatal(err)
 	}
 	}
 
 
-	err = v.RegisterValidation("publickey_path", isPublicKeyPath)
+	err = v.RegisterValidation("certificate_path", isCertificatePath)
 
 
 	if err != nil {
 	if err != nil {
 		logger.Fatal(err)
 		logger.Fatal(err)