Skip to content

Commit 1ef5de6

Browse files
gavinfishrujche
andauthored
Add thumbprint for keyvault jca when load cert from local path (Azure#23212)
* Add thumbprint for keyvault jca when load cert from local path * Simplify code of getThumbprint(). Co-authored-by: Rujun Chen <[email protected]>
1 parent 6eb6c81 commit 1ef5de6

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/implementation/certificates/SpecificPathCertificates.java

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,30 @@
33

44
package com.azure.security.keyvault.jca.implementation.certificates;
55

6-
import java.io.InputStream;
6+
import static java.util.logging.Level.INFO;
7+
import static java.util.logging.Level.WARNING;
8+
79
import java.io.BufferedInputStream;
8-
import java.io.IOException;
9-
import java.io.FileInputStream;
1010
import java.io.File;
11+
import java.io.FileInputStream;
12+
import java.io.IOException;
13+
import java.io.InputStream;
1114
import java.security.Key;
1215
import java.security.cert.Certificate;
16+
import java.security.cert.CertificateEncodingException;
1317
import java.security.cert.CertificateException;
1418
import java.security.cert.CertificateFactory;
1519
import java.security.cert.X509Certificate;
16-
import java.util.List;
17-
import java.util.Objects;
20+
import java.util.ArrayList;
21+
import java.util.Arrays;
1822
import java.util.HashMap;
23+
import java.util.List;
1924
import java.util.Map;
20-
import java.util.ArrayList;
25+
import java.util.Objects;
2126
import java.util.Optional;
22-
import java.util.Arrays;
2327
import java.util.logging.Logger;
2428
import java.util.stream.Stream;
25-
26-
import static java.util.logging.Level.INFO;
27-
import static java.util.logging.Level.WARNING;
29+
import org.apache.commons.codec.digest.DigestUtils;
2830

2931
/**
3032
* Store certificates loaded from file system.
@@ -90,7 +92,7 @@ private SpecificPathCertificates(String certificatePath) {
9092
/**
9193
* Add alias and certificate
9294
*
93-
* @param alias certificate alias
95+
* @param alias certificate alias
9496
* @param certificate certificate value
9597
*/
9698
public void setCertificateEntry(String alias, Certificate certificate) {
@@ -112,17 +114,17 @@ public void setCertificateEntry(String alias, Certificate certificate) {
112114
private void setCertificateByFile(File file) throws IOException {
113115
X509Certificate certificate;
114116
try (InputStream inputStream = new FileInputStream(file);
115-
BufferedInputStream bytes = new BufferedInputStream(inputStream)) {
117+
BufferedInputStream bytes = new BufferedInputStream(inputStream)) {
116118
String alias = toCertificateAlias(file);
117119
CertificateFactory cf = CertificateFactory.getInstance("X.509");
118120
certificate = (X509Certificate) cf.generateCertificate(bytes);
119121
if (certificate != null) {
120122
setCertificateEntry(alias, certificate);
121-
LOGGER.log(INFO, "Load file system certificate: {0} from: {1}",
122-
new Object[]{alias, file.getName()});
123+
LOGGER.log(INFO, "Load certificate from specific path. alias = {0}, thumbprint = {1}, file = {2}",
124+
new Object[]{alias, getThumbprint(certificate), file.getName()});
123125
}
124126
} catch (CertificateException e) {
125-
LOGGER.log(WARNING, "Unable to load specific path certificate from: " + file.getName(), e);
127+
LOGGER.log(WARNING, "Unable to load certificate from: " + file.getName(), e);
126128
}
127129
}
128130

@@ -140,6 +142,21 @@ private void loadCertificatesFromSpecificPath() {
140142
}
141143
}
142144

145+
/**
146+
* Get thumbprint for a certificate
147+
*
148+
* @param certificate certificate value
149+
* @return certificate thumbprint
150+
*/
151+
String getThumbprint(Certificate certificate) {
152+
try {
153+
return DigestUtils.sha1Hex(certificate.getEncoded());
154+
} catch (CertificateEncodingException e) {
155+
LOGGER.log(WARNING, "Unable to get thumbprint for certificate", e);
156+
}
157+
return "";
158+
}
159+
143160
/**
144161
* Get alias from file
145162
*

sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/implementation/certificates/SpecificPathCertificatesTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ public static String getFilePath(String packageName) {
1717

1818
@Test
1919
public void testSetCertificateEntry() {
20+
String alias = "sideload";
2021
specificPathCertificates = SpecificPathCertificates.getSpecificPathCertificates(getFilePath("custom\\"));
21-
Assertions.assertTrue(specificPathCertificates.getAliases().contains("sideload"));
22+
Assertions.assertTrue(specificPathCertificates.getAliases().contains(alias));
23+
Assertions.assertEquals("b7f261c05a972088bc40e458ad92227edf6b03b7", specificPathCertificates.getThumbprint(specificPathCertificates.getCertificates().get(alias)));
2224
}
2325
}

0 commit comments

Comments
 (0)