@@ -8,12 +8,11 @@ import (
88 "strings"
99
1010 aws "github.com/aws/aws-sdk-go-v2/aws"
11- awscfg "github.com/aws/aws-sdk-go-v2/config"
12- awscred "github.com/aws/aws-sdk-go-v2/credentials"
13- "github.com/aws/aws-sdk-go-v2/service/acm"
11+ "github.com/aws/aws-sdk-go-v2/service/acm/types"
1412 "github.com/aws/smithy-go"
1513
1614 "github.com/certimate-go/certimate/pkg/core"
15+ awsacmsdk "github.com/certimate-go/certimate/pkg/sdk3rd/aws/acm"
1716 xcert "github.com/certimate-go/certimate/pkg/utils/cert"
1817)
1918
@@ -35,7 +34,7 @@ type CertmgrConfig struct {
3534type Certmgr struct {
3635 config * CertmgrConfig
3736 logger * slog.Logger
38- sdkClient * acm .Client
37+ sdkClient * awsacmsdk .Client
3938}
4039
4140var _ Provider = (* Certmgr )(nil )
@@ -89,34 +88,37 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*Uplo
8988 default :
9089 }
9190
92- listCertificatesReq := & acm. ListCertificatesInput {
91+ listCertificatesReq := & awsacmsdk. ListCertificatesRequest {
9392 NextToken : listCertificatesNextToken ,
9493 MaxItems : aws .Int32 (1000 ),
94+ SortBy : types .SortByCreatedAt ,
95+ SortOrder : types .SortOrderDescending ,
9596 }
96- listCertificatesResp , err := c .sdkClient .ListCertificates (ctx , listCertificatesReq )
97+ listCertificatesResp , err := c .sdkClient .ListCertificatesWithContext (ctx , listCertificatesReq )
9798 c .logger .Debug ("sdk request 'acm.ListCertificates'" , slog .Any ("request" , listCertificatesReq ), slog .Any ("response" , listCertificatesResp ))
9899 if err != nil {
99100 return nil , fmt .Errorf ("failed to execute sdk request 'acm.ListCertificates': %w" , err )
100101 }
101102
102103 for _ , certItem := range listCertificatesResp .CertificateSummaryList {
103- // 对比证书备用名称
104- if ! strings .EqualFold (strings .Join (certX509 .DNSNames , "," ), strings .Join (certItem .SubjectAlternativeNameSummaries , "," )) {
104+ // 对比证书通用名称
105+ // 注意,虽然文档中描述为包含了备用名称字段,但实际值不完整,因此不能用于判断证书是否相同
106+ if certItem .DomainName == nil || ! strings .EqualFold (certX509 .Subject .CommonName , * certItem .DomainName ) {
105107 continue
106108 }
107109
108110 // 对比证书有效期
109- if certItem .NotBefore == nil || ! certX509 .NotBefore .Equal ( * certItem .NotBefore ) {
111+ if certItem .NotBefore == nil || certX509 .NotBefore .Unix () != certItem .NotBefore . Unix ( ) {
110112 continue
111- } else if certItem .NotAfter == nil || ! certX509 .NotAfter .Equal ( * certItem .NotAfter ) {
113+ } else if certItem .NotAfter == nil || certX509 .NotAfter .Unix () != certItem .NotAfter . Unix ( ) {
112114 continue
113115 }
114116
115117 // 对比证书内容
116- getCertificateReq := & acm. GetCertificateInput {
118+ getCertificateReq := & awsacmsdk. GetCertificateRequest {
117119 CertificateArn : certItem .CertificateArn ,
118120 }
119- getCertificateResp , err := c .sdkClient .GetCertificate (ctx , getCertificateReq )
121+ getCertificateResp , err := c .sdkClient .GetCertificateWithContext (ctx , getCertificateReq )
120122 if err != nil {
121123 var sdkErr smithy.APIError
122124 if errors .As (err , & sdkErr ) {
@@ -151,12 +153,12 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*Uplo
151153
152154 // 导入证书
153155 // REF: https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html
154- importCertificateReq := & acm. ImportCertificateInput {
156+ importCertificateReq := & awsacmsdk. ImportCertificateRequest {
155157 Certificate : ([]byte )(serverCertPEM ),
156158 CertificateChain : ([]byte )(issuerCertPEM ),
157159 PrivateKey : ([]byte )(privkeyPEM ),
158160 }
159- importCertificateResp , err := c .sdkClient .ImportCertificate (ctx , importCertificateReq )
161+ importCertificateResp , err := c .sdkClient .ImportCertificateWithContext (ctx , importCertificateReq )
160162 c .logger .Debug ("sdk request 'acm.ImportCertificate'" , slog .Any ("request" , importCertificateReq ), slog .Any ("response" , importCertificateResp ))
161163 if err != nil {
162164 return nil , fmt .Errorf ("failed to execute sdk request 'acm.ImportCertificate': %w" , err )
@@ -179,13 +181,13 @@ func (c *Certmgr) Replace(ctx context.Context, certIdOrName string, certPEM, pri
179181
180182 // 导入证书
181183 // REF: https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html
182- importCertificateReq := & acm. ImportCertificateInput {
184+ importCertificateReq := & awsacmsdk. ImportCertificateRequest {
183185 CertificateArn : aws .String (certIdOrName ),
184186 Certificate : ([]byte )(serverCertPEM ),
185187 CertificateChain : ([]byte )(issuerCertPEM ),
186188 PrivateKey : ([]byte )(privkeyPEM ),
187189 }
188- importCertificateResp , err := c .sdkClient .ImportCertificate (ctx , importCertificateReq )
190+ importCertificateResp , err := c .sdkClient .ImportCertificateWithContext (ctx , importCertificateReq )
189191 c .logger .Debug ("sdk request 'acm.ImportCertificate'" , slog .Any ("request" , importCertificateReq ), slog .Any ("response" , importCertificateResp ))
190192 if err != nil {
191193 return nil , fmt .Errorf ("failed to execute sdk request 'acm.ImportCertificate': %w" , err )
@@ -194,15 +196,14 @@ func (c *Certmgr) Replace(ctx context.Context, certIdOrName string, certPEM, pri
194196 return & ReplaceResult {}, nil
195197}
196198
197- func createSDKClient (accessKeyId , secretAccessKey , region string ) (* acm .Client , error ) {
198- cfg , err := awscfg . LoadDefaultConfig ( context . Background (),
199- awscfg . WithCredentialsProvider ( awscred . NewStaticCredentialsProvider ( accessKeyId , secretAccessKey , "" ) ),
200- awscfg .WithRegion (region ),
199+ func createSDKClient (accessKeyId , secretAccessKey , region string ) (* awsacmsdk .Client , error ) {
200+ client , err := awsacmsdk . NewClient (
201+ awsacmsdk . WithAkSk ( accessKeyId , secretAccessKey ),
202+ awsacmsdk .WithRegion (region ),
201203 )
202204 if err != nil {
203205 return nil , err
204206 }
205207
206- client := acm .NewFromConfig (cfg )
207208 return client , nil
208209}
0 commit comments