Skip to content

Commit c73d683

Browse files
committed
correctly exit non zero when the SAN doesn't match
1 parent ade30e4 commit c73d683

File tree

5 files changed

+74
-9
lines changed

5 files changed

+74
-9
lines changed

bin/katello-certs-check

+2-8
Original file line numberDiff line numberDiff line change
@@ -210,15 +210,9 @@ function check-cert-san () {
210210
return
211211
fi
212212
done
213-
error
214-
echo "The $CERT_FILE does not have a Subject Alt Name matching the Subject CN"
213+
error 11 "The $CERT_FILE does not have a Subject Alt Name matching the Subject CN"
215214
else
216-
error
217-
cat <<Explanation
218-
$CERT_FILE does not contain a Subject Alt Name. Common Name is deprecated, use Subject Alt Name instead.
219-
See: https://tools.ietf.org/html/rfc2818#section-3.1
220-
221-
Explanation
215+
error 11 "The $CERT_FILE does not contain a Subject Alt Name. Common Name is deprecated, use Subject Alt Name instead. See: https://tools.ietf.org/html/rfc2818#section-3.1"
222216
fi
223217
}
224218

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDXjCCAkagAwIBAgIUHYl6NxLcZpBuyTUI4LaWJOaM8iAwDQYJKoZIhvcNAQEL
3+
BQAwHjEcMBoGA1UEAwwTVGVzdCBTZWxmLVNpZ25lZCBDQTAeFw0yNDA5MTYxMjU2
4+
NTBaFw0zNDA5MTQxMjU2NTBaMCYxJDAiBgNVBAMMG2ZvcmVtYW4tYmFkLXNhbi5l
5+
eGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfDETt1
6+
UPBqx5dr7cVywZ2wz5s8SyLLtbcXEqXxcS38kJCeFEh2WsSYrNp9MfA6ORZcp0AG
7+
ZiAnXNPLSNteBCiGkk3TNiq0VY1M8iph75uDPrJBu+whlMhYrJQ00jLxh5lAD8Xx
8+
a4s6AnwKniQTXBaX4pybRQn4BE2PuXey+oBn6vPlYjGBn2LvUeq9uR2IahRScKGM
9+
DkkOEX+h251EGSxAdMpciOpXJullMHU55RP6WWubaRosh6ZZbIqg/M9eLkiswU1N
10+
HP9J9G4Mr6f1Z+LHLG3lvQHP/uLOXLKF7X8areI09l4OP1VNJ45mOfm4Embv5dEq
11+
iF4lMQkJIyQ7FsECAwEAAaOBizCBiDALBgNVHQ8EBAMCBSAwOQYDVR0RBDIwMIIT
12+
Zm9yZW1hbi5leGFtcGxlLmNvbYIZZm9yZW1hbi1lYzM4NC5leGFtcGxlLmNvbTAd
13+
BgNVHQ4EFgQUujQ5fdBkDZBlVRj1lkSvBR7DXzMwHwYDVR0jBBgwFoAUM/NEeWkW
14+
/3oJxDCh0KJ1DN8YI+gwDQYJKoZIhvcNAQELBQADggEBAIFXaKOP6My13xNGXYfP
15+
p0cWuV3lGWhFk2iOWIe51EwZmd3thW0PrEDRVUFo1PXKeTAftQns3Cgb/DMIsLTV
16+
H5dQZ/x+74RpgLC2iuLqQpeQqGJkrN1SCJuiFESdaocxA7uYuewgUsZ3LAaYsjp1
17+
zaSs8mN/AJ9FbOSssaNqFMGOQNU3uFou23K1Qqs7jDjk/MGORp+6PD3FMqB6qO9X
18+
aVFPsHZQDUIK1vEjaRWwZSPRJrbZ9xteYiSudi4KJcVnoI2lHENF7j2N+3RyXZBq
19+
PgQGMB69gGsTmkahy6ItQue+zKqfku9515a5bq5LxAa6gWuwP4LkKvUNcpYgEFcj
20+
1KE=
21+
-----END CERTIFICATE-----
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC3wxE7dVDwaseX
3+
a+3FcsGdsM+bPEsiy7W3FxKl8XEt/JCQnhRIdlrEmKzafTHwOjkWXKdABmYgJ1zT
4+
y0jbXgQohpJN0zYqtFWNTPIqYe+bgz6yQbvsIZTIWKyUNNIy8YeZQA/F8WuLOgJ8
5+
Cp4kE1wWl+Kcm0UJ+ARNj7l3svqAZ+rz5WIxgZ9i71HqvbkdiGoUUnChjA5JDhF/
6+
odudRBksQHTKXIjqVybpZTB1OeUT+llrm2kaLIemWWyKoPzPXi5IrMFNTRz/SfRu
7+
DK+n9Wfixyxt5b0Bz/7izlyyhe1/Gq3iNPZeDj9VTSeOZjn5uBJm7+XRKoheJTEJ
8+
CSMkOxbBAgMBAAECggEADvpblnbUus/dRlqR9hDJNr7xYQQMVMD5Zfu/tZ5lHPwz
9+
1VHJMfHRqqoOFr3zGtNIEWpKaJXM76x9rLaqUNUMLjhvxt+jD96EhaCisXErnEeZ
10+
jeJ9PH0tORo/MNJQWr4kkQlvb7EilKXNC4q7ApJAZIgLPLwMJ8ibIy5Gjfrc36fU
11+
++htHVWB1yhPujxHEbxoIrxJ8Qctf/Jz2Sa42PyofJ0yDmFTtJRu0DfFNv4O4Q5o
12+
TvOs4TafS8RDit5NtEGX1E0+08g5N/v5hp7t+XrrDWqaCj+I+Cp2jSExlwUrLTxk
13+
r+PvskMaSCYLboS4t8ZBsF/JkgzssLOuIa82i0Vw9QKBgQD6yOP3u4tFD0WxKJcI
14+
o8YCxSFsDjvdn3SBwqQEqwjIWvg32XQWLILCPpIuaDEg6dsuJUppO4pOYb43j7U7
15+
DES+K/m+dSOyLWFxlR/DEO6uEwUczW3meTDw2Qo/fcJZ5xGLuc1XZan20K36af/V
16+
Ce5+XLJG0/Mz0hNiEP1sJAvZ9QKBgQC7lV2xcsHtXOSLZNSFOSWBXISgHFv3Vsbf
17+
Lg3DNx9puaJ+1VtqJ9HbvXmMZV6nJA68yrI/AN0TCqmwc3I0icFuxne/Fwk/fIJ9
18+
29Cn/ZPcjXu1zL8jmTHDz5L7KFbToyy7ok503waBUgKOPvRoJdXZQq9M4OSgDtNP
19+
o+8X0hgOHQKBgQC6g0/wff3dNbeKQ3rYhR0OEFiECa4CbMX0f7MGecGFaQq0Vric
20+
iSwSlQCZHQp0xRgqoLdPvmVlWBJlNi7+JGi32vLZ8DrFGDUhiVve8qfgtOqXej0j
21+
LLz2UyTpBXnW7SBCf8Q1HLokgxzxYYZQhhtmxUAdpyJ4RuP9ik8/7ysVRQKBgQCl
22+
Lvftnd+V1PpQob7ffh4/1yfXEoINwXWo7JYj9PONl3G3fMxeI6iSdzyE3HNIfeEY
23+
cOobvvfun7Ij9tV33GLg2JZ0SKXVKSCEEkCg3hUJ3/Eze5RJlcqT4sNMtg4XmhZ3
24+
OIscMZU55ezoNBnnaIHzKtzRtyy8obGE7RhLgq+6JQKBgQDQ2xskB8dob6R4esLy
25+
s2E3kf2OmVswllK15H36u6FkS1h/AxiaRTUTkbmvpiobdqDAAKGlZGxF8hck4wmq
26+
+3uZWUcdbO67ld/P0xiP3RNwSOpQ7WZsv7zKGnCaungxGPvqNp5Dm7RTqR+kQtKV
27+
A/FM9fRgYNuJPmgpee84o2Dk4Q==
28+
-----END PRIVATE KEY-----

spec/fixtures/katello-certs-check/create_cert.sh

+10
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ else
3838
echo "CA certificate bundle with trust rules exists. Skipping."
3939
fi
4040

41+
CERT_NAME=foreman-bad-san.example.com
42+
if [[ ! -f "$CERTS_DIR/$CERT_NAME.key" || ! -f "$CERTS_DIR/$CERT_NAME.crt" ]]; then
43+
echo "Generate server certificate"
44+
openssl genrsa -out $CERTS_DIR/$CERT_NAME.key 2048
45+
openssl req -new -key $CERTS_DIR/$CERT_NAME.key -out $CERTS_DIR/$CERT_NAME.csr -subj "/CN=${CERT_NAME}"
46+
openssl x509 -req -in $CERTS_DIR/$CERT_NAME.csr -CA $CERTS_DIR/$CA_CERT_NAME.crt -CAkey $CERTS_DIR/$CA_CERT_NAME.key -CAcreateserial -out $CERTS_DIR/$CERT_NAME.crt -days 3650 -sha256 -extfile extensions.txt -extensions extensions
47+
else
48+
echo "Server certificate with bad SAN exists. Skipping."
49+
fi
50+
4151
CERT_NAME=foreman.example.com
4252
if [[ ! -f "$CERTS_DIR/$CERT_NAME.key" || ! -f "$CERTS_DIR/$CERT_NAME.crt" ]]; then
4353
echo "Generate server certificate"

spec/katello_certs_check_spec.rb

+13-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,19 @@ def fixture(filename)
4949
command_with_certs = "#{command} -b #{ca} -k #{key} -c #{cert}"
5050
_stdout, stderr, status = Open3.capture3(command_with_certs)
5151
expect(stderr).to include 'does not verify'
52-
expect(status.exitstatus).to eq 4
52+
expect(status.exitstatus).to eq 15 # the code for invalid is 4, but the cert is also failing the SAN check, making it 15
53+
end
54+
end
55+
56+
context 'with invalid SAN server certificates' do
57+
let(:key) { File.join(certs_directory, 'foreman-bad-san.example.com.key') }
58+
let(:cert) { File.join(certs_directory, 'foreman-bad-san.example.com.crt') }
59+
60+
it 'fails if purpose is not sslserver' do
61+
command_with_certs = "#{command} -b #{ca} -k #{key} -c #{cert}"
62+
_stdout, stderr, status = Open3.capture3(command_with_certs)
63+
expect(stderr).to include 'does not have a Subject Alt Name matching the Subject CN'
64+
expect(status.exitstatus).to eq 11
5365
end
5466
end
5567

0 commit comments

Comments
 (0)