3
3
4
4
package com .azure .security .keyvault .jca .implementation .certificates ;
5
5
6
- import java .io .InputStream ;
6
+ import static java .util .logging .Level .INFO ;
7
+ import static java .util .logging .Level .WARNING ;
8
+
7
9
import java .io .BufferedInputStream ;
8
- import java .io .IOException ;
9
- import java .io .FileInputStream ;
10
10
import java .io .File ;
11
+ import java .io .FileInputStream ;
12
+ import java .io .IOException ;
13
+ import java .io .InputStream ;
11
14
import java .security .Key ;
12
15
import java .security .cert .Certificate ;
16
+ import java .security .cert .CertificateEncodingException ;
13
17
import java .security .cert .CertificateException ;
14
18
import java .security .cert .CertificateFactory ;
15
19
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 ;
18
22
import java .util .HashMap ;
23
+ import java .util .List ;
19
24
import java .util .Map ;
20
- import java .util .ArrayList ;
25
+ import java .util .Objects ;
21
26
import java .util .Optional ;
22
- import java .util .Arrays ;
23
27
import java .util .logging .Logger ;
24
28
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 ;
28
30
29
31
/**
30
32
* Store certificates loaded from file system.
@@ -90,7 +92,7 @@ private SpecificPathCertificates(String certificatePath) {
90
92
/**
91
93
* Add alias and certificate
92
94
*
93
- * @param alias certificate alias
95
+ * @param alias certificate alias
94
96
* @param certificate certificate value
95
97
*/
96
98
public void setCertificateEntry (String alias , Certificate certificate ) {
@@ -112,17 +114,17 @@ public void setCertificateEntry(String alias, Certificate certificate) {
112
114
private void setCertificateByFile (File file ) throws IOException {
113
115
X509Certificate certificate ;
114
116
try (InputStream inputStream = new FileInputStream (file );
115
- BufferedInputStream bytes = new BufferedInputStream (inputStream )) {
117
+ BufferedInputStream bytes = new BufferedInputStream (inputStream )) {
116
118
String alias = toCertificateAlias (file );
117
119
CertificateFactory cf = CertificateFactory .getInstance ("X.509" );
118
120
certificate = (X509Certificate ) cf .generateCertificate (bytes );
119
121
if (certificate != null ) {
120
122
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 ()});
123
125
}
124
126
} 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 );
126
128
}
127
129
}
128
130
@@ -140,6 +142,21 @@ private void loadCertificatesFromSpecificPath() {
140
142
}
141
143
}
142
144
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
+
143
160
/**
144
161
* Get alias from file
145
162
*
0 commit comments