Skip to content

Commit 053248d

Browse files
mattdickinson5jenkins
authored and
jenkins
committed
[util-security] add deserializeAndFilterOutInvalidCertificates
Problem/Solution: Add `deserializeAndFilterOutInvalidCertificates` which wraps the `deserializeX509` call in a `Try` (as `certificate.checkValidity()` can return `CertificateExpiredException`, `CertificateNotYetValidException`) and separates out any expired or not yet valid certificates detected. JIRA Issues: PSEC-16977 Differential Revision: https://phabricator.twitter.biz/D1107551
1 parent 0571f97 commit 053248d

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

CHANGELOG.rst

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ Runtime Behavior Changes
1414

1515
* util: Bump version of Jackson to 2.14.3. ``PHAB_ID=D1069160``
1616

17+
* util-securty: Add `deserializeAndFilterOutInvalidCertificates` Which wraps
18+
the `deserializeX509` call in a Try. ``PHAB_ID=D1107551``
19+
1720
22.12.0
1821
-------
1922

util-security/src/main/scala/com/twitter/util/security/X509CertificateDeserializer.scala

+24
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,28 @@ object X509CertificateDeserializer {
5252

5353
messages.map(_.map(deserializeX509))
5454
}
55+
56+
/**
57+
* Deserializes an [[InputStream]] that contains PEM-encoded X.509
58+
* Certificates. Wraps the `deserializeX509` call in a Try
59+
* (as `certificate.checkValidity()` can return CertificateExpiredException, CertificateNotYetValidException)
60+
* and separates out any expired or not yet valid certificates detected.
61+
*
62+
* Closes the InputStream once it has finished reading.
63+
*/
64+
def deserializeAndFilterOutInvalidCertificates(
65+
rawPem: String,
66+
name: String
67+
): (Seq[Try[X509Certificate]], Seq[Try[X509Certificate]]) = {
68+
val pemBytes = new PemBytes(rawPem, name)
69+
val messages: Try[Seq[Array[Byte]]] = pemBytes
70+
.readMessages(MessageType)
71+
messages
72+
.map(certs => {
73+
certs
74+
.map(cert => {
75+
Try(deserializeX509(cert))
76+
}).partition(_.isReturn)
77+
}).get()
78+
}
5579
}

0 commit comments

Comments
 (0)