Skip to content

Commit 694460b

Browse files
committed
[csr] use random serial with prefix
1 parent d24952a commit 694460b

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

internal/csr/const.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package csr
2+
3+
const (
4+
GroupWebhooks uint8 = 1
5+
)

internal/csr/service.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,14 @@ func (s *Service) process(ctx context.Context, m core.TaskMessage) error {
9292
return err
9393
}
9494

95+
serialNumber, err := s.newSerialNumber(GroupWebhooks)
96+
if err != nil {
97+
return err
98+
}
99+
95100
// Create a signed certificate
96101
template := &x509.Certificate{
97-
SerialNumber: big.NewInt(1),
102+
SerialNumber: serialNumber,
98103
Subject: csr.Subject,
99104
NotBefore: time.Now(),
100105
NotAfter: time.Now().Add(365 * 24 * time.Hour),
@@ -132,6 +137,16 @@ func (s *Service) parseCsr(content string) (*x509.CertificateRequest, error) {
132137
return x509.ParseCertificateRequest(block.Bytes)
133138
}
134139

140+
func (s *Service) newSerialNumber(prefix uint8) (*big.Int, error) {
141+
serialNumberLimit := new(big.Int).
142+
Lsh(big.NewInt(1), 120)
143+
serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
144+
if err != nil {
145+
return nil, err
146+
}
147+
return serialNumber.Or(serialNumber, new(big.Int).Lsh(big.NewInt(int64(prefix)), 120)), nil
148+
}
149+
135150
func NewService(csrs *repository, caCert *x509.Certificate, caKey any, log *zap.Logger) *Service {
136151
if csrs == nil {
137152
panic("csrs is required")

0 commit comments

Comments
 (0)