Skip to content

Commit c3ba292

Browse files
committed
Fix: SSL dashboard/api validity problem
Signed-off-by: Fatih USTA <[email protected]>
1 parent ad697c6 commit c3ba292

File tree

1 file changed

+36
-2
lines changed
  • api/internal/handler/ssl

1 file changed

+36
-2
lines changed

api/internal/handler/ssl/ssl.go

+36-2
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,9 @@ func (h *Handler) List(c droplet.Context) (interface{}, error) {
198198
for _, item := range ret.Rows {
199199
ssl := &entity.SSL{}
200200
_ = utils.ObjectClone(item, ssl)
201+
x509_validity, _ := x509CertValidity(ssl.Cert)
202+
ssl.ValidityStart = x509_validity.NotBefore
203+
ssl.ValidityEnd = x509_validity.NotAfter
201204
ssl.Key = ""
202205
ssl.Keys = nil
203206
list = append(list, ssl)
@@ -327,6 +330,35 @@ func (h *Handler) BatchDelete(c droplet.Context) (interface{}, error) {
327330
return nil, nil
328331
}
329332

333+
// validity allows unmarshaling the certificate validity date range
334+
type validity struct {
335+
NotBefore, NotAfter int64
336+
}
337+
338+
func x509CertValidity(crt string) (*validity, error) {
339+
if crt == "" {
340+
return nil, consts.ErrSSLCertificate
341+
}
342+
343+
certDERBlock, _ := pem.Decode([]byte(crt))
344+
if certDERBlock == nil {
345+
return nil, consts.ErrSSLCertificateResolution
346+
}
347+
348+
x509Cert, err := x509.ParseCertificate(certDERBlock.Bytes)
349+
350+
if err != nil {
351+
return nil, consts.ErrSSLCertificateResolution
352+
}
353+
354+
val := validity{}
355+
356+
val.NotBefore = x509Cert.NotBefore.Unix()
357+
val.NotAfter = x509Cert.NotAfter.Unix()
358+
359+
return &val, nil
360+
}
361+
330362
func ParseCert(crt, key string) (*entity.SSL, error) {
331363
if crt == "" || key == "" {
332364
return nil, consts.ErrSSLCertificate
@@ -383,8 +415,6 @@ func ParseCert(crt, key string) (*entity.SSL, error) {
383415

384416
ssl.Snis = snis
385417
ssl.Key = key
386-
ssl.ValidityStart = x509Cert.NotBefore.Unix()
387-
ssl.ValidityEnd = x509Cert.NotAfter.Unix()
388418
ssl.Cert = crt
389419

390420
return &ssl, nil
@@ -424,6 +454,10 @@ func (h *Handler) Validate(c droplet.Context) (interface{}, error) {
424454
return nil, err
425455
}
426456

457+
x509_validity, _ := x509CertValidity(input.Cert)
458+
ssl.ValidityStart = x509_validity.NotBefore
459+
ssl.ValidityEnd = x509_validity.NotAfter
460+
427461
return ssl, nil
428462
}
429463

0 commit comments

Comments
 (0)