From 25b07255709a6ec44130fccf123ebaaa46daa141 Mon Sep 17 00:00:00 2001 From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com> Date: Fri, 14 Jun 2024 16:20:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=AD=E7=AD=BE=E8=AF=81=E4=B9=A6?= =?UTF-8?q?=E4=B8=8D=E9=87=8D=E7=BD=AE=E7=A7=81=E9=92=A5=20(#5458)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs https://github.com/1Panel-dev/1Panel/issues/5314 --- backend/app/service/website_ssl.go | 32 ++++++++++++++++--- .../src/views/website/ssl/create/index.vue | 2 +- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/backend/app/service/website_ssl.go b/backend/app/service/website_ssl.go index d2d000b4f..7f7318a25 100644 --- a/backend/app/service/website_ssl.go +++ b/backend/app/service/website_ssl.go @@ -2,6 +2,7 @@ package service import ( "context" + "crypto" "crypto/x509" "encoding/pem" "fmt" @@ -226,9 +227,32 @@ func (w WebsiteSSLService) ObtainSSL(apply request.WebsiteSSLApply) error { domains = append(domains, strings.Split(websiteSSL.Domains, ",")...) } - privateKey, err := certcrypto.GeneratePrivateKey(ssl.KeyType(websiteSSL.KeyType)) - if err != nil { - return err + var privateKey crypto.PrivateKey + if websiteSSL.PrivateKey == "" { + privateKey, err = certcrypto.GeneratePrivateKey(ssl.KeyType(websiteSSL.KeyType)) + if err != nil { + return err + } + } else { + block, _ := pem.Decode([]byte(websiteSSL.PrivateKey)) + if block == nil { + return buserr.New("invalid PEM block") + } + var privKey crypto.PrivateKey + keyType := ssl.KeyType(websiteSSL.KeyType) + switch keyType { + case certcrypto.EC256, certcrypto.EC384: + privKey, err = x509.ParseECPrivateKey(block.Bytes) + if err != nil { + return nil + } + case certcrypto.RSA2048, certcrypto.RSA3072, certcrypto.RSA4096: + privKey, err = x509.ParsePKCS1PrivateKey(block.Bytes) + if err != nil { + return nil + } + } + privateKey = privKey } websiteSSL.Status = constant.SSLApply @@ -382,7 +406,7 @@ func (w WebsiteSSLService) Update(update request.WebsiteSSLUpdate) error { updateParams["primary_domain"] = update.PrimaryDomain updateParams["description"] = update.Description updateParams["provider"] = update.Provider - updateParams["key_type"] = update.KeyType + //updateParams["key_type"] = update.KeyType updateParams["push_dir"] = update.PushDir updateParams["disable_cname"] = update.DisableCNAME updateParams["skip_dns"] = update.SkipDNS diff --git a/frontend/src/views/website/ssl/create/index.vue b/frontend/src/views/website/ssl/create/index.vue index 8ab28bb48..e80b6a881 100644 --- a/frontend/src/views/website/ssl/create/index.vue +++ b/frontend/src/views/website/ssl/create/index.vue @@ -53,7 +53,7 @@ - +