Skip to content

Commit ef6188c

Browse files
fix(RHOAIENG-38319): update tls CA subject and DNS names
1 parent 7ae6ffb commit ef6188c

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

src/codeflare_sdk/common/utils/generate_cert.py

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
import os
1717
from cryptography.hazmat.primitives import serialization, hashes
1818
from cryptography.hazmat.primitives.asymmetric import rsa
19+
from cryptography.hazmat.backends import default_backend
1920
from cryptography import x509
2021
from cryptography.x509.oid import NameOID
22+
import ipaddress
2123
import datetime
2224
from ..kubernetes_cluster.auth import (
2325
config_check,
@@ -163,8 +165,27 @@ def generate_tls_cert(cluster_name, namespace, days=30):
163165
ca_cert = secret.get("ca.crt")
164166
ca_key = secret.get("tls.key")
165167

168+
if not ca_cert:
169+
raise ValueError(
170+
f"CA certificate (ca.crt or tls.crt) not found in secret {secret_name}. "
171+
f"Available keys: {list(secret.keys())}"
172+
)
173+
if not ca_key:
174+
raise ValueError(
175+
f"CA private key (tls.key) not found in secret {secret_name}. "
176+
f"Available keys: {list(secret.keys())}"
177+
)
178+
179+
# Decode and write CA certificate
180+
ca_cert_pem = base64.b64decode(ca_cert).decode("utf-8")
166181
with open(os.path.join(tls_dir, "ca.crt"), "w") as f:
167-
f.write(base64.b64decode(ca_cert).decode("utf-8"))
182+
f.write(ca_cert_pem)
183+
184+
# Extract CA subject to use as issuer for client certificate
185+
ca_cert_obj = x509.load_pem_x509_certificate(
186+
ca_cert_pem.encode("utf-8"), default_backend()
187+
)
188+
ca_subject = ca_cert_obj.subject
168189

169190
# Generate tls.key and signed tls.cert locally for ray client
170191
# Similar to running these commands:
@@ -191,16 +212,22 @@ def generate_tls_cert(cluster_name, namespace, days=30):
191212
with open(os.path.join(tls_dir, "tls.key"), "w") as f:
192213
f.write(tls_key.decode("utf-8"))
193214

215+
head_svc_name = f"{cluster_name}-head-svc"
216+
service_dns = f"{head_svc_name}.{namespace}.svc"
217+
service_dns_cluster_local = f"{head_svc_name}.{namespace}.svc.cluster.local"
218+
219+
san_list = [
220+
x509.DNSName("localhost"),
221+
x509.IPAddress(ipaddress.IPv4Address("127.0.0.1")),
222+
x509.DNSName(head_svc_name),
223+
x509.DNSName(service_dns),
224+
x509.DNSName(service_dns_cluster_local),
225+
]
226+
194227
one_day = datetime.timedelta(1, 0, 0)
195228
tls_cert = (
196229
x509.CertificateBuilder()
197-
.issuer_name(
198-
x509.Name(
199-
[
200-
x509.NameAttribute(NameOID.COMMON_NAME, "root-ca"),
201-
]
202-
)
203-
)
230+
.issuer_name(ca_subject)
204231
.subject_name(
205232
x509.Name(
206233
[
@@ -213,9 +240,7 @@ def generate_tls_cert(cluster_name, namespace, days=30):
213240
.not_valid_after(datetime.datetime.today() + (one_day * days))
214241
.serial_number(x509.random_serial_number())
215242
.add_extension(
216-
x509.SubjectAlternativeName(
217-
[x509.DNSName("localhost"), x509.DNSName("127.0.0.1")]
218-
),
243+
x509.SubjectAlternativeName(san_list),
219244
False,
220245
)
221246
.sign(

src/codeflare_sdk/common/utils/test_generate_cert.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def test_generate_ca_cert():
5353

5454
def secret_ca_retreival(secret_name, namespace):
5555
ca_private_key_bytes, ca_cert = generate_ca_cert()
56-
data = {"ca.crt": ca_cert, "ca.key": ca_private_key_bytes}
56+
data = {"ca.crt": ca_cert, "tls.key": ca_private_key_bytes}
5757
assert secret_name == "ca-secret-cluster"
5858
assert namespace == "namespace"
5959
return client.models.V1Secret(data=data)

0 commit comments

Comments
 (0)