certs.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package seclib
  15. import (
  16. "crypto/rsa"
  17. "crypto/x509"
  18. "encoding/pem"
  19. "regexp"
  20. "strings"
  21. "yunion.io/x/pkg/errors"
  22. )
  23. func CleanCertificate(cert string) string {
  24. re := regexp.MustCompile("---(.*)CERTIFICATE(.*)---")
  25. cert = re.ReplaceAllString(cert, "")
  26. cert = strings.Trim(cert, " \n")
  27. // cert = strings.Replace(cert, "\n", "", -1)
  28. return cert
  29. }
  30. func DecodePrivateKey(keyString []byte) (*rsa.PrivateKey, error) {
  31. block, _ := pem.Decode(keyString)
  32. privKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
  33. if err == nil {
  34. return privKey.(*rsa.PrivateKey), nil
  35. }
  36. priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
  37. if err == nil {
  38. return priv, nil
  39. }
  40. return nil, errors.Wrap(errors.ErrInvalidFormat, "not a valid private key")
  41. }