Skip to content

Commit 0e8f6d7

Browse files
jgnagyclaude
andcommitted
fix: correct x509 certificate version to ensure x509v3 compliance
- Changed csr_cert.version from 3 to 2 in SSL helper sign_csr method - OpenSSL uses zero-indexed versions where 2 = x509v3 - Added integration test to verify certificates use correct version - Prevents future regressions of x509 version configuration 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 29840e6 commit 0e8f6d7

File tree

2 files changed

+2
-1
lines changed

2 files changed

+2
-1
lines changed

lib/bullion/helpers/ssl.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def sign_csr(csr, username)
200200
# Create a OpenSSL cert using select info from the CSR
201201
csr_cert = OpenSSL::X509::Certificate.new
202202
csr_cert.serial = cert.serial
203-
csr_cert.version = 3
203+
csr_cert.version = 2 # OpenSSL uses zero-indexed versions: 2 = x509v3
204204
csr_cert.not_before = Time.now
205205
# only 90 days for ACMEv2
206206
csr_cert.not_after = csr_cert.not_before + (3 * 30 * 24 * 60 * 60)

spec/integration/bullion/services/ca_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ def app
129129
expect(cert).to start_with("-----BEGIN CERTIFICATE-----\n")
130130
decoded_cert = OpenSSL::X509::Certificate.new(cert)
131131
expect(decoded_cert.subject.to_s).to end_with("/CN=#{domain}")
132+
expect(decoded_cert.version).to eq(2) # Ensure x509v3 (version 2 in zero-indexed OpenSSL)
132133
extensions = decoded_cert.extensions.to_h { [it.oid, it.value] }
133134
expect(extensions["basicConstraints"]).to eq("CA:FALSE")
134135
expect(extensions["extendedKeyUsage"]).to eq("TLS Web Server Authentication")

0 commit comments

Comments
 (0)