Skip to content

Commit d65425e

Browse files
yuehaiizirain
andauthored
fix: deduplicate CA certificates in ClientTrafficPolicy mTLS (#8909)
* fix: deduplicate CA certificates in ClientTrafficPolicy mTLS Signed-off-by: hai.yue <20416005+yuehaii@users.noreply.github.com> * update current release note Signed-off-by: hai.yue <20416005+yuehaii@users.noreply.github.com> * fix lint warnings Signed-off-by: hai.yue <20416005+yuehaii@users.noreply.github.com> * de-duplicate cert during append process Signed-off-by: hai.yue <20416005+yuehaii@users.noreply.github.com> * update ca with different certs Signed-off-by: hai.yue <20416005+yuehaii@users.noreply.github.com> * performance optimize: prevent seen been duplicate rebuild when multiple caCertificateRefs are configured. Signed-off-by: hai.yue <20416005+yuehaii@users.noreply.github.com> * fix incorrect release note Signed-off-by: hai.yue <20416005+yuehaii@users.noreply.github.com> --------- Signed-off-by: hai.yue <20416005+yuehaii@users.noreply.github.com> Signed-off-by: Hai <20416005+yuehaii@users.noreply.github.com> Co-authored-by: zirain <zirain2009@gmail.com>
1 parent ae20fb5 commit d65425e

8 files changed

Lines changed: 466 additions & 3 deletions

internal/gatewayapi/clienttrafficpolicy.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package gatewayapi
77

88
import (
9+
"crypto/sha256"
910
"errors"
1011
"fmt"
1112
"math"
@@ -971,6 +972,7 @@ func (t *Translator) buildListenerTLSParameters(
971972
Name: irTLSCACertName(policy.Namespace, policy.Name),
972973
}
973974

975+
seenCACerts := make(map[[sha256.Size]byte]struct{})
974976
for _, caCertRef := range tlsParams.ClientValidation.CACertificateRefs {
975977
caCertBytes, err := t.validateAndGetDataAtKeyInRef(caCertRef, CACertKey, resources, from)
976978
if err != nil {
@@ -988,7 +990,7 @@ func (t *Translator) buildListenerTLSParameters(
988990
)
989991
}
990992
}
991-
irCACert.Certificate = append(irCACert.Certificate, validCaCertBytes...)
993+
irCACert.Certificate = appendDedupPEMCertsWithSeen(irCACert.Certificate, validCaCertBytes, seenCACerts)
992994
}
993995

994996
// CA certificates are required for verification modes.

internal/gatewayapi/testdata/clienttrafficpolicy-mtls-cert-bundle-both-valid.in.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,6 @@ secrets:
6363
name: tls-bundle-secret
6464
type: kubernetes.io/tls
6565
data:
66-
ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR3VENDQXFtZ0F3SUJBZ0lVWTNmMFI2SExoVGNJU2FIaURhUkF0d1dHMDJrd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2J6RUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdNQWxaQk1SRXdEd1lEVlFRSERBaFRiMjFsUTJsMAplVEVUTUJFR0ExVUVDZ3dLUlc1MmIzbFFjbTk0ZVRFUU1BNEdBMVVFQ3d3SFIyRjBaWGRoZVRFWk1CY0dBMVVFCkF3d1FiWFJzY3k1bGVHRnRjR3hsTG1OdmJUQWdGdzB5TlRFeU1UTXhOREl3TXpGYUdBOHlNVEkxTVRFeE9URTAKTWpBek1Wb3diekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnTUFsWkJNUkV3RHdZRFZRUUhEQWhUYjIxbApRMmwwZVRFVE1CRUdBMVVFQ2d3S1JXNTJiM2xRY205NGVURVFNQTRHQTFVRUN3d0hSMkYwWlhkaGVURVpNQmNHCkExVUVBd3dRYlhSc2N5NWxlR0Z0Y0d4bExtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0MKQVFvQ2dnRUJBT3Jxc21LS20xd1NZNlF2dm9vQkY1dGZVanByYWNwb3lERTVJVGVxMVcyeHVMRHBzWG9CTTZJVApzSG5LSWM3a3gzcEZmTk5YZG5TVE1PYU5CNEoycEIvUG5EdjhMK3FWN2dPYS91bGdjMnpJUVpCaVFtWEt0WTNFClNHL0ZQZmM1YmZ0bC9KcktHaExkaTdSNm40SkxIbGw0OVgyZ0xZc2hvM3ZNTXprQXJRUTVpaVVCRDlnSE1GVU4KV1loOTRONnQyQUxxY3A4cTZQZ2Y5R0Y5Z2Y2OGMzSWtnNlBQL3FTR2dQTTRMWHZQYlgyM0ZqUjBPdzcyTE8ybwphbDdTMVNwWFM5MGJyV2VXWThwMFBocVd1QnBSeWl4T1JFcWltY1BndXdGTisyYi9KZVJpeFlldTJjZisrYXU5ClhVWkFyYmc2UDJsNDNjSC9EZUNCbWdtTU9lVjExY0VDQXdFQUFhTlRNRkV3SFFZRFZSME9CQllFRksvTTVyK0gKMVNQdFhlOHBzd2srcmh3T1JFUW5NQjhHQTFVZEl3UVlNQmFBRksvTTVyK0gxU1B0WGU4cHN3aytyaHdPUkVRbgpNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRnh5NmNpNVl3eVhndDcrCisxdjF0LzVsSS9vTytGNVZROWxCY29HK3UzRDduTGFtdkpEdFl0TkdxbFFZUVEwYXpXeDFqaEpjTzNQMnhGcUIKdTNJUU5GQ3VrdlZNVDFnd05UUDQwMFRQcmptOWFJblVYcE0wRUZtbXp0R0o4akJWdkVmc0kxK0ZUWnR4ckdzSQpBeGZpM1JzYjJISWZCVStzOEFpRTdOb2lVSFlJWi9pL21wNGswczlZVzNBQk9sT2duY0w1eEsyeWdhMGJGeW1HCjNmYVBrSEVURHVpaUVoMnR6cThuUThETWl1TVZwUEtzeEZJOWtVQ1FhcVZZZ2lKVjVrVjVZZGRyVHgyMC9wVWwKQ1RNVS9nd1pSUzVBMlJ1ZHQvWDZKMXNhRUFROXhHcTVNQ25wczFnazVXV09sRTJhZXZQYkRsTmV6RkVRcjJabAp4OXJKOTR3PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEd1RDQ0FxbWdBd0lCQWdJVVkzZjBSNkhMaFRjSVNhSGlEYVJBdHdXRzAya3dEUVlKS29aSWh2Y05BUUVMCkJRQXdiekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnTUFsWkJNUkV3RHdZRFZRUUhEQWhUYjIxbFEybDAKZVRFVE1CRUdBMVVFQ2d3S1JXNTJiM2xRY205NGVURVFNQTRHQTFVRUN3d0hSMkYwWlhkaGVURVpNQmNHQTFVRQpBd3dRYlhSc2N5NWxlR0Z0Y0d4bExtTnZiVEFnRncweU5URXlNVE14TkRJd016RmFHQTh5TVRJMU1URXhPVEUwCk1qQXpNVm93YnpFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ01BbFpCTVJFd0R3WURWUVFIREFoVGIyMWwKUTJsMGVURVRNQkVHQTFVRUNnd0tSVzUyYjNsUWNtOTRlVEVRTUE0R0ExVUVDd3dIUjJGMFpYZGhlVEVaTUJjRwpBMVVFQXd3UWJYUnNjeTVsZUdGdGNHeGxMbU52YlRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDCkFRb0NnZ0VCQU9ycXNtS0ttMXdTWTZRdnZvb0JGNXRmVWpwcmFjcG95REU1SVRlcTFXMnh1TERwc1hvQk02SVQKc0huS0ljN2t4M3BGZk5OWGRuU1RNT2FOQjRKMnBCL1BuRHY4TCtxVjdnT2EvdWxnYzJ6SVFaQmlRbVhLdFkzRQpTRy9GUGZjNWJmdGwvSnJLR2hMZGk3UjZuNEpMSGxsNDlYMmdMWXNobzN2TU16a0FyUVE1aWlVQkQ5Z0hNRlVOCldZaDk0TjZ0MkFMcWNwOHE2UGdmOUdGOWdmNjhjM0lrZzZQUC9xU0dnUE00TFh2UGJYMjNGalIwT3c3MkxPMm8KYWw3UzFTcFhTOTBicldlV1k4cDBQaHFXdUJwUnlpeE9SRXFpbWNQZ3V3Rk4rMmIvSmVSaXhZZXUyY2YrK2F1OQpYVVpBcmJnNlAybDQzY0gvRGVDQm1nbU1PZVYxMWNFQ0F3RUFBYU5UTUZFd0hRWURWUjBPQkJZRUZLL001citICjFTUHRYZThwc3drK3Jod09SRVFuTUI4R0ExVWRJd1FZTUJhQUZLL001citIMVNQdFhlOHBzd2srcmh3T1JFUW4KTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUZ4eTZjaTVZd3lYZ3Q3KworMXYxdC81bEkvb08rRjVWUTlsQmNvRyt1M0Q3bkxhbXZKRHRZdE5HcWxRWVFRMGF6V3gxamhKY08zUDJ4RnFCCnUzSVFORkN1a3ZWTVQxZ3dOVFA0MDBUUHJqbTlhSW5VWHBNMEVGbW16dEdKOGpCVnZFZnNJMStGVFp0eHJHc0kKQXhmaTNSc2IySElmQlUrczhBaUU3Tm9pVUhZSVovaS9tcDRrMHM5WVczQUJPbE9nbmNMNXhLMnlnYTBiRnltRwozZmFQa0hFVER1aWlFaDJ0enE4blE4RE1pdU1WcFBLc3hGSTlrVUNRYXFWWWdpSlY1a1Y1WWRkclR4MjAvcFVsCkNUTVUvZ3daUlM1QTJSdWR0L1g2SjFzYUVBUTl4R3E1TUNucHMxZ2s1V1dPbEUyYWV2UGJEbE5lekZFUXIyWmwKeDlySjk0dz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
66+
ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR0akNDQXA2Z0F3SUJBZ0lKQVBjYWRkYVBsSk1BTUEwR0NTcUdTSWIzRFFFQkN3VUFNRzh4Q3pBSkJnTlYKQkFZVEFsVlRNUXN3Q1FZRFZRUUlEQUpXUVRFUk1BOEdBMVVFQnd3SVUyOXRaVU5wZEhreEV6QVJCZ05WQkFvTQpDa1Z1ZG05NVVISnZlSGt4RURBT0JnTlZCQXNNQjBkaGRHVjNZWGt4R1RBWEJnTlZCQU1NRUcxMGJITXVaWGhoCmJYQnNaUzVqYjIwd0lCY05Nall3TlRJMU1ESTBNekExV2hnUE1qRXlOakExTURFd01qUXpNRFZhTUc4eEN6QUoKQmdOVkJBWVRBbFZUTVFzd0NRWURWUVFJREFKV1FURVJNQThHQTFVRUJ3d0lVMjl0WlVOcGRIa3hFekFSQmdOVgpCQW9NQ2tWdWRtOTVVSEp2ZUhreEVEQU9CZ05WQkFzTUIwZGhkR1YzWVhreEdUQVhCZ05WQkFNTUVHMTBiSE11ClpYaGhiWEJzWlM1amIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDbldqV2YKdy9DNHVOQlpuZHNHQmRZTndmeU9Ocll4QkwrVFdkVTJIQjVRMklDQzNrTklLSXArV0UxZnFITUpzeFdJTE1SWApzeHVaa1B3cXN4Zy95cm1TNThaaFJ0MnQvN0EyNDVISkJMbWd2SUxoa3JvNkhla1hPajJEdTFhcG9yc0tXZjUxCnBYNWFkMVRZYTFaUXdNUEYxOWpXWjVLTzBuVEVKRmtGc1NpYmpsT1ZVYjhvbU9PU1ZrMStPai91TFo1WXI1WkcKOGVIZ2ZVa2hYd09EZUd1Snc1WDNaTXlXUHQrMDFadUZiSU84eHZIbnVHT0NpdW1pMGJzUGtyallhYnNJRWpWVwpwWGlGY1ZNYkFzNFV4NldmaGlnNnBlUWVqSVQwSGpwNVI4b1Y1VXBWK205WVNZblJ4SjJaK29tUHZKMkY0aEpVCjg2ZHNwTVI1eUZzWEFldXBBZ01CQUFHalV6QlJNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUUKRklvaGNUbzg4Njc5QUdMM1FhdFkxM2plSWxvck1COEdBMVVkSXdRWU1CYUFGSW9oY1RvODg2NzlBR0wzUWF0WQoxM2plSWxvck1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQm9OMytUb3Y5Y2VvNDR4UXdOdG8wRzl1L3Yzb01GCnpIbTFId3ZPVzZsak9rUWtXVEZlaytLWE9Vb2tvTFl2VkpEVE9Qa29BMGZHSW1tUEhYTDFReWVyalR1ZjUvS1oKWTBCNk5NSUJjdGRKcXl2cStRZlhBYk92ZldpNmlHZ1N1NHEwa1BvRzV6Um9MbkZEZUlLM0YxRzZVaTdFZ0tNcgpPaW5uTlZsUWEzUzlCenRTenJkc3pyUFEvT1k2MHA2SG0xNXIySDkwOHIzUytYWS9GaHhIQmJwYUc5RDBXcnBVCnF2ancxZThNeUpMNzlIbi9vemtndUhkV3dlSXBILzNPSjBQQXE2em9tWEt3VG5mYXpLazdkZlI3WGUralhWU3cKc25NTUo5RlVOU1NyN3BzZGVYVmNrUW0wejN2ZW83ZUhBdkFxaEZpZ2w1aFFGSS9KZG9xMGUyWDYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRHRqQ0NBcDZnQXdJQkFnSUpBTFZhSUloa29jbHlNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1HOHhDekFKQmdOVgpCQVlUQWxWVE1Rc3dDUVlEVlFRSURBSldRVEVSTUE4R0ExVUVCd3dJVTI5dFpVTnBkSGt4RXpBUkJnTlZCQW9NCkNrVnVkbTk1VUhKdmVIa3hFREFPQmdOVkJBc01CMGRoZEdWM1lYa3hHVEFYQmdOVkJBTU1FRzEwYkhNdVpYaGgKYlhCc1pTNWpiMjB3SUJjTk1qWXdOVEkxTURJME16QTFXaGdQTWpFeU5qQTFNREV3TWpRek1EVmFNRzh4Q3pBSgpCZ05WQkFZVEFsVlRNUXN3Q1FZRFZRUUlEQUpXUVRFUk1BOEdBMVVFQnd3SVUyOXRaVU5wZEhreEV6QVJCZ05WCkJBb01Da1Z1ZG05NVVISnZlSGt4RURBT0JnTlZCQXNNQjBkaGRHVjNZWGt4R1RBWEJnTlZCQU1NRUcxMGJITXUKWlhoaGJYQnNaUzVqYjIwd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNqUm1kMApwU2Z1TnVJTkJBMFdCWEFkOE10MjIzb2lZVndrcVU1amFLWjZWQ0g1N25nVEhYQlZ0MjUxVWJXSm9DclhGczJYClg1RXRqSDZmT3JzYk8raCtrblNYWHpQeCszYUx1Vk9ZMjAvMWppQ1FXRFVGWWZqSFYvKzRsNUhON3daYWVRZkcKUndhbm04ZHZTZUVBZGxRWHgxbG1hNXp2WFo3ZHZzWXBNbkI1MlJZYWR1R1JoYWZHRmdyRmNHNkJPNjB6SlBKRgpXc094Yi9hL2NMNll6MHNXUmxkdVVLK1dYY21vSzdDeERUdmo1a1RCeExzK1BZTVZyTTVUOXJlanJmc0dlb1ZxCjA0eXZXRnMybXJRbjVMT1k0VFdFa0FaV200R0lNVlFGR1U1TmRqbFJXUEFSdFpLNUFraDRIUDlTRkFURUlKaVQKS01IYlhJV0kwYkNQZmRiRkFnTUJBQUdqVXpCUk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRQpGRmlXbGNheHllTW9YbGNvWG0wc0JLbW50alVvTUI4R0ExVWRJd1FZTUJhQUZGaVdsY2F4eWVNb1hsY29YbTBzCkJLbW50alVvTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFCVHZEVUEzM3B3Q2V0cTVhcEFYSGF0YXV1aFpSbUUKcGJzcjlEMlNYTUpvVU5pVTQ0THk5b29SbXBJMUgwcnpTMXd6bDY2TUpKcGRrUUE0OHFZMTY5YnZXc04rMzJudApVZXM2Q2xrdTBoTEcxSGorUDdCS2IyckJ3TDBZQmRMYjU5Sy84S3hoLzlXWnlDc2NEdVRpWkZFRWg1dU94V2M0CklqbG5mcmJ1NkFVT0g5NHY3c3EvdVdxN2laVlFzY25KVHVDa3Vmc1NoZkdMZ2EzaURvYjBzS2xlemFKZlJtUkYKczBpVVdsSkpyU1ppMkVCVUdBY0xJc3FrZWcwUUVNN1RVanVNVktBWWFLYldnclFpdHdBTnBNRVVVMFlYNkhvYgp4Z3hqbzdYV1VZZkM3dHZiNHM2TStmK0dITXhLVHIyRldBZ0Y5ZHpOTDJlRTYxemdSMitrQUpxYgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
6767
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRREdOcnp0MlcwZHdySEYKUUNNVWhyMmNkdG5VQjBZWWFHMWlwNVB3WFBGUkw1eUJTQ0JnOE5RQkNucVpMSW0ydUpmdy9UdnNnQ0pMd2UwVwpSMjgzaXUvOUlDWkVWSWpyRk03WFA0N1hzVTYvSitZSkFOSUlzc1JnSUtIVGw5Qm5Ra0EzS2ZySEo4YXFCUW9XClRxakZscVBZQnE0RjV2dXNIUDNrVUV2TVpmSDk1bVA3anhsckJLTkQrS1Q1aXNjWktLck5ZUFZEVkhXRzVwUEUKN2svUFVvTkFnQVBFTWhhUmk4VW81MFA2UkFsVW1IcGNleU40cjVZZ2h1NW1hU1ZVdUFYNVB4a2pSTzlkc3RlZAorM0V5UkNvTkRNNjVtcXVXMVhETFdTYU1GZHVmVVdCSm5wNUxUVm9yOWtJY2hxOUZsemhkRm4zTlRWVmVmK2E4CjVneURyVXFKQWdNQkFBRUNnZ0VBQnp0U2g4NndhRG1sQU8zRU5JNFk4aEhmcnkzSHdvRmhoNkZXYUsvZmFieWcKdGhKNEJKN0NGcnFpT3A5R2MvNmIrVGNvQ0tBcjFYM3J1a01jeCt3L1hCOGdQa3NqbkFqQmtOYTVEYk5pb2Q5TAp0REE0anQyRTJYNnA5aWdhWlZZUENvN2R5ZHZiUFVpYlNRYVJmNTlZSVh3c1BSQzVHeHNMV1ZrNDlyOW1jRUszCk9EVjlFMFZJNHZ6bWNFaGxoN1hORHB3M1ZDL1VFTVRRaFhhU1Y5Nk9kaWJPOHU5L2JrTmRKc2JXRkpRcXVQYmgKSUtCT3hiU1Q2WkN1NHUrN3ZIK2lrNWF4TkhybkFsUStlUlk5VVI5M0lpdk1hVVdybEJkeG55OStZUm5WVUdoUwpuenYweUY2T3VoZnk2Y25LZjRxYlhMVVJLK1orUml2TmZCYkVldWlDZ1FLQmdRRDBCVDg2NDQvSEhYcnlQRVdCCjRBUFBPSCtnb3FZMDRqODM0eUNpcFpQM1FBU0F5UGlCWEtsdlpLOU14NGE0YlBZM1dWQUpWc2JRV2pLd1ZBUE8KSnZ5SXAyTWZ1SSs0Q0M3ODkvUitwTkdpRmlsUDdIRjBhTHVMUVU0ZVNJcXdZMjJmTjBVWEpJNmpsdzJvWkdEWAp6TWJ3TVdjSDB0K0pDTDAzNFYvK2YvcFp5UUtCZ1FEUDhjK1RYQ2V0S2h3Q2dDZUpFcUwrNHZzeGN4VEdmNzlJCmxLbVc5QmtSOC9Iaks2UkFUYVdjb3hNV21wd3phOWoyUE5ham5GZzJ5dTU1VmtubFRMazAxTDVaTkFXcTFQQnkKa3NBcFVtRkxCVzRRUnMzalFoV0pwWEJ4TDQveFBkK2hDUlNNdzU3VEQvNzhNWGMwN2l2M1ZzdWE0aDNXaXNSYQpSVGEvajkvS3dRS0JnR01XVGxxblZSYlJqYjhYWWxJZW1PMW9UOHIyd083d2dDTTlnMThJUlZFOUdaY0NCSWJqCkRacENGRHpsT0h0akk0Zk9LSVhpU3RFSUQxVXlpR2tKdzducDNvSmUrMTBMVmFrN05uakdqS2w0dmtYS0NUZnYKMzFmb3FNUDdTUFhmS2dCZy9Sa3NxdzhhbzEwaGhZR2JrWnl2TXRzbWNjYS9XYlo3T2ZPcUhBcWhBb0dCQUpmUAo3RUdqRi94ZUw5RExpeEdSbjVvQ1VHMUxuVEZGOW5xZ3ZpZE0wamkvSmlzNW8xS20zVys3eHFYTC9wbXo5TlBnCm1yc2IyM00xT0dFeFZBV3B1OVVNTkdPZmpUdW85bHBQTlNkMTB6NFlHc0NiVUpqSG1EM0RvSkdocmE3c0F5WG8KSVM2YmFvcWd0UUdkZzNBTEtlSUxaZDRQa3NVY3pqa3hLc1V6M3FpQkFvR0JBTXZEMUZUTkIzUVcrVDA4ZC9iQQpUTDJodDBUZEpLbjNiQjJiMkdXTmlnUmE3QlFaaEJ3R1o3ODZ4cm4xbzFrck1CUEVJS3hQejhERFFBRVFvbWplCmdab1RpbHl5b2Fnc2dhU0NSTW5HTDFtSG5JVTkwakNvOGpoaTkxOW0xS0dEakFhL21jam55UUEvdGd0WVBkM0sKa0tMSXVONng5aDJoOUhGSTQyT0FDM1EwCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
6868
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURuVENDQW9XZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREJ2TVFzd0NRWURWUVFHRXdKVlV6RUwKTUFrR0ExVUVDQXdDVmtFeEVUQVBCZ05WQkFjTUNGTnZiV1ZEYVhSNU1STXdFUVlEVlFRS0RBcEZiblp2ZVZCeQpiM2g1TVJBd0RnWURWUVFMREFkSFlYUmxkMkY1TVJrd0Z3WURWUVFEREJCdGRHeHpMbVY0WVcxd2JHVXVZMjl0Ck1DQVhEVEkxTVRJeE16RTFNREV5TWxvWUR6SXhNalV4TVRFNU1UVXdNVEl5V2pCdk1Rc3dDUVlEVlFRR0V3SlYKVXpFTE1Ba0dBMVVFQ0F3Q1ZrRXhFVEFQQmdOVkJBY01DRk52YldWRGFYUjVNUk13RVFZRFZRUUtEQXBGYm5adgplVkJ5YjNoNU1SQXdEZ1lEVlFRTERBZEhZWFJsZDJGNU1Sa3dGd1lEVlFRRERCQnRkR3h6TG1WNFlXMXdiR1V1ClkyOXRNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXhqYTg3ZGx0SGNLeHhVQWoKRklhOW5IYloxQWRHR0dodFlxZVQ4Rnp4VVMrY2dVZ2dZUERVQVFwNm1TeUp0cmlYOFAwNzdJQWlTOEh0RmtkdgpONHJ2L1NBbVJGU0k2eFRPMXorTzE3Rk92eWZtQ1FEU0NMTEVZQ0NoMDVmUVowSkFOeW42eHlmR3FnVUtGazZvCnhaYWoyQWF1QmViN3JCejk1RkJMekdYeC9lWmorNDhaYXdTalEvaWsrWXJIR1NpcXpXRDFRMVIxaHVhVHhPNVAKejFLRFFJQUR4RElXa1l2RktPZEQra1FKVkpoNlhIc2plSytXSUlidVpta2xWTGdGK1Q4WkkwVHZYYkxYbmZ0eApNa1FxRFF6T3VacXJsdFZ3eTFrbWpCWGJuMUZnU1o2ZVMwMWFLL1pDSElhdlJaYzRYUlo5elUxVlhuL212T1lNCmc2MUtpUUlEQVFBQm8wSXdRREFkQmdOVkhRNEVGZ1FVY0JmUXBidDZYNzZZY2dIQkZ5ZXZKVDNsQkNrd0h3WUQKVlIwakJCZ3dGb0FVcjh6bXY0ZlZJKzFkN3ltekNUNnVIQTVFUkNjd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBTXdBWVord3dRR0FnazJ1b3Z0MEU3TjhCWlVKbG1lNW1scEcvYm5qRU5KSlBGQnFONGg3Wnl1cWc5OFFSd2srClZYZHhlQ3AxSWRCTGk4MFRTbjRtVTk1VTV4Lzg5T0oxWlpqZytub1dvY1dydUFlTW8xa2RQc2lkai9TWXBIYksKOVNDZVJUVm5xcDBtcER2WjA0M2tvZzNWZkJzNGhaZEhIblBadnNqbnZrS1pob2dUcVNSak5NdU9WdU9TYU5YaQo2SFd6ZTFDalgyZDhPd1JOaUhtMjg2Z1JoZjFxcHBtaThxK3kvbkFuRk16U0VlcCs2UkhTczh0N0FiYUU0NTRmCk56eXJNaTlhaXJmK0w0ajBjQ2JvQW1ieTZlZUZDNUlIK1B0YXpCNGd4K0pKT1MrTmFxd3pTZFh0REJTdGxKdkYKOHBpY2t0WUJ0NzdrZmJqcWxKaFJEdkU9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K

0 commit comments

Comments
 (0)