1818package translator
1919
2020import (
21- "crypto/x509"
2221 "encoding/json"
23- "encoding/pem"
2422 "fmt"
2523
2624 "github.com/pkg/errors"
27- corev1 "k8s.io/api/core/v1"
2825 "k8s.io/apimachinery/pkg/types"
2926 gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
3027
@@ -33,6 +30,7 @@ import (
3330 "github.com/apache/apisix-ingress-controller/internal/controller/label"
3431 "github.com/apache/apisix-ingress-controller/internal/id"
3532 "github.com/apache/apisix-ingress-controller/internal/provider"
33+ sslutils "github.com/apache/apisix-ingress-controller/internal/ssl"
3634 internaltypes "github.com/apache/apisix-ingress-controller/internal/types"
3735 "github.com/apache/apisix-ingress-controller/internal/utils"
3836)
@@ -97,7 +95,7 @@ func (t *Translator) translateSecret(tctx *provider.TranslateContext, listener g
9795 t .Log .Error (errors .New ("secret data is nil" ), "failed to get secret data" , "secret" , secretNN )
9896 return nil , fmt .Errorf ("no secret data found for %s/%s" , ns , name )
9997 }
100- cert , key , err := extractKeyPair (secret , true )
98+ cert , key , err := sslutils . ExtractKeyPair (secret , true )
10199 if err != nil {
102100 t .Log .Error (err , "extract key pair" , "secret" , secretNN )
103101 return nil , err
@@ -110,7 +108,7 @@ func (t *Translator) translateSecret(tctx *provider.TranslateContext, listener g
110108 if listener .Hostname != nil && * listener .Hostname != "" {
111109 sslObj .Snis = append (sslObj .Snis , string (* listener .Hostname ))
112110 } else {
113- hosts , err := extractHost (cert )
111+ hosts , err := sslutils . ExtractHostsFromCertificate (cert )
114112 if err != nil {
115113 return nil , err
116114 }
@@ -137,68 +135,6 @@ func (t *Translator) translateSecret(tctx *provider.TranslateContext, listener g
137135 return sslObjs , nil
138136}
139137
140- func extractHost (cert []byte ) ([]string , error ) {
141- block , _ := pem .Decode (cert )
142- if block == nil {
143- return nil , errors .New ("parse certificate: not in PEM format" )
144- }
145- der , err := x509 .ParseCertificate (block .Bytes )
146- if err != nil {
147- return nil , errors .Wrap (err , "parse certificate" )
148- }
149- hosts := make ([]string , 0 , len (der .DNSNames ))
150- for _ , dnsName := range der .DNSNames {
151- if dnsName != "*" {
152- hosts = append (hosts , dnsName )
153- }
154- }
155- return hosts , nil
156- }
157-
158- func extractKeyPair (s * corev1.Secret , hasPrivateKey bool ) ([]byte , []byte , error ) {
159- if _ , ok := s .Data ["cert" ]; ok {
160- return extractApisixSecretKeyPair (s , hasPrivateKey )
161- } else if _ , ok := s .Data [corev1 .TLSCertKey ]; ok {
162- return extractKubeSecretKeyPair (s , hasPrivateKey )
163- } else if ca , ok := s .Data [corev1 .ServiceAccountRootCAKey ]; ok && ! hasPrivateKey {
164- return ca , nil , nil
165- } else {
166- return nil , nil , errors .New ("unknown secret format" )
167- }
168- }
169-
170- func extractApisixSecretKeyPair (s * corev1.Secret , hasPrivateKey bool ) (cert []byte , key []byte , err error ) {
171- var ok bool
172- cert , ok = s .Data ["cert" ]
173- if ! ok {
174- return nil , nil , errors .New ("missing cert field" )
175- }
176-
177- if hasPrivateKey {
178- key , ok = s .Data ["key" ]
179- if ! ok {
180- return nil , nil , errors .New ("missing key field" )
181- }
182- }
183- return
184- }
185-
186- func extractKubeSecretKeyPair (s * corev1.Secret , hasPrivateKey bool ) (cert []byte , key []byte , err error ) {
187- var ok bool
188- cert , ok = s .Data [corev1 .TLSCertKey ]
189- if ! ok {
190- return nil , nil , errors .New ("missing cert field" )
191- }
192-
193- if hasPrivateKey {
194- key , ok = s .Data [corev1 .TLSPrivateKeyKey ]
195- if ! ok {
196- return nil , nil , errors .New ("missing key field" )
197- }
198- }
199- return
200- }
201-
202138// fillPluginsFromGatewayProxy fill plugins from GatewayProxy to given plugins
203139func (t * Translator ) fillPluginsFromGatewayProxy (plugins adctypes.GlobalRule , gatewayProxy * v1alpha1.GatewayProxy ) {
204140 if gatewayProxy == nil {
0 commit comments