Skip to content

Commit 724a30d

Browse files
committed
refactor: use cmk_crypto for agent receiver tests
Decrease difference in certs used for testing Change-Id: I049585f91d5b63ef2305b57aa312e87c25eafc36
1 parent 3dd3b34 commit 724a30d

3 files changed

Lines changed: 14 additions & 37 deletions

File tree

module_layers.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1135,7 +1135,7 @@ allows = [
11351135
]
11361136

11371137
[components."cmk.testlib.agent_receiver"]
1138-
allows = ["@relay_protocols", "cmk.agent_receiver"]
1138+
allows = ["@crypto", "@relay_protocols", "cmk.agent_receiver"]
11391139

11401140
[components."cmk.testlib.metric_backend"]
11411141
allows = ["cmk.metric_backend"]

packages/cmk-agent-receiver/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ py_library(
137137
visibility = ["//packages/cmk-agent-receiver/tests:__subpackages__"],
138138
deps = [
139139
":cmk-agent-receiver",
140+
"//packages/cmk-crypto",
140141
requirement("cryptography"),
141142
requirement("fastapi"),
142143
requirement("httpx"),

packages/cmk-agent-receiver/cmk/testlib/agent_receiver/certs.py

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,14 @@
33
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
44
# conditions defined in the file COPYING, which is part of this source code package.
55

6-
from datetime import datetime, timedelta, UTC
6+
from datetime import timedelta
77

88
from cryptography.hazmat.primitives.asymmetric import rsa
99
from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15
1010
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey
1111
from cryptography.hazmat.primitives.hashes import SHA256
12-
from cryptography.hazmat.primitives.serialization import (
13-
Encoding,
14-
NoEncryption,
15-
PrivateFormat,
16-
)
1712
from cryptography.x509 import (
1813
Certificate,
19-
CertificateBuilder,
2014
CertificateSigningRequest,
2115
CertificateSigningRequestBuilder,
2216
load_pem_x509_certificate,
@@ -26,6 +20,7 @@
2620
from cryptography.x509.oid import NameOID
2721

2822
from cmk.agent_receiver.lib.config import Config
23+
from cmk.crypto.certificate import CertificateWithPrivateKey
2924

3025
CA_CERT = b"""-----BEGIN PRIVATE KEY-----
3126
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDpDGxoGtI59lZM
@@ -93,39 +88,20 @@ def generate_site_certificate(config: Config) -> None:
9388
Creates a certificate signed by the CA and writes both the private key
9489
and certificate to the site certificate path.
9590
"""
96-
# Load the CA to sign the site certificate
97-
ca_cert = load_pem_x509_certificate(CA_CERT)
98-
99-
# Generate a private key and certificate for the site
100-
site_private_key = generate_private_key(2048)
101-
102-
# Create site certificate signed by CA
103-
now = datetime.now(UTC).replace(tzinfo=None)
104-
site_cert = (
105-
CertificateBuilder()
106-
.subject_name(
107-
Name(
108-
[
109-
NameAttribute(NameOID.COMMON_NAME, config.site_name),
110-
]
111-
)
112-
)
113-
.issuer_name(ca_cert.subject)
114-
.public_key(site_private_key.public_key())
115-
.serial_number(12345)
116-
.not_valid_before(now)
117-
.not_valid_after(now + timedelta(days=365))
118-
.sign(site_private_key, SHA256()) # Self-signed for tests
91+
site_ca = CertificateWithPrivateKey.load_combined_file_content(
92+
config.site_ca_path.read_text(), passphrase=None
93+
)
94+
site_cert = site_ca.issue_new_certificate(
95+
common_name=config.site_name,
96+
organization=f"Checkmk Site {config.site_name}",
97+
expiry=timedelta(days=365),
98+
key_size=2048,
11999
)
120100

121101
# Write site certificate and private key
122102
config.site_cert_path.parent.mkdir(parents=True, exist_ok=True)
123-
site_cert_pem = site_cert.public_bytes(Encoding.PEM)
124-
site_key_pem = site_private_key.private_bytes(
125-
Encoding.PEM,
126-
PrivateFormat.TraditionalOpenSSL,
127-
NoEncryption(),
128-
)
103+
site_cert_pem = site_cert.certificate.dump_pem().bytes
104+
site_key_pem = site_cert.private_key.dump_pem(None).bytes
129105
# Site cert file contains both key and cert
130106
config.site_cert_path.write_bytes(site_key_pem + site_cert_pem)
131107

0 commit comments

Comments
 (0)