Skip to content

Commit 54f085a

Browse files
authored
Merge pull request #21 from RUB-NDS/sha256fingerprint-refactoring
Sha256fingerprint refactoring
2 parents dd55b3f + c28c959 commit 54f085a

File tree

3 files changed

+51
-22
lines changed

3 files changed

+51
-22
lines changed

src/main/java/de/rub/nds/tlsscanner/probe/certificate/CertificateReport.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public interface CertificateReport {
2121

2222
public Certificate getCertificate();
2323

24+
public String getSHA256Fingerprint();
25+
2426
public String getSubject();
2527

2628
public String getCommonNames();

src/main/java/de/rub/nds/tlsscanner/probe/certificate/CertificateReportGenerator.java

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@
1111
import de.rub.nds.tlsattacker.core.constants.HashAlgorithm;
1212
import de.rub.nds.tlsattacker.core.constants.SignatureAlgorithm;
1313
import de.rub.nds.tlsattacker.core.constants.SignatureAndHashAlgorithm;
14+
import java.io.IOException;
15+
import java.security.MessageDigest;
16+
import java.security.NoSuchAlgorithmException;
1417
import java.security.cert.CertificateParsingException;
1518
import java.security.cert.X509Certificate;
1619
import java.util.LinkedList;
1720
import java.util.List;
21+
import javax.xml.bind.DatatypeConverter;
1822
import org.apache.logging.log4j.LogManager;
1923
import org.apache.logging.log4j.Logger;
2024
import org.bouncycastle.asn1.x500.RDN;
@@ -29,9 +33,9 @@
2933
* @author Robert Merget - [email protected]
3034
*/
3135
public class CertificateReportGenerator {
32-
36+
3337
private static final Logger LOGGER = LogManager.getLogger(CertificateReportGenerator.class.getName());
34-
38+
3539
public static List<CertificateReport> generateReports(Certificate certs) {
3640
List<CertificateReport> reportList = new LinkedList<>();
3741
if (certs != null) {
@@ -41,7 +45,7 @@ public static List<CertificateReport> generateReports(Certificate certs) {
4145
}
4246
return reportList;
4347
}
44-
48+
4549
public static CertificateReport generateReport(org.bouncycastle.asn1.x509.Certificate cert) {
4650
CertificateReportImplementation report = new CertificateReportImplementation();
4751
setSubject(report, cert);
@@ -61,36 +65,37 @@ public static CertificateReport generateReport(org.bouncycastle.asn1.x509.Certif
6165
setRevoked(report, cert);
6266
setDnsCCA(report, cert);
6367
setTrusted(report, cert);
68+
setSha256Hash(report, cert);
6469
report.setCertificate(cert);
6570
return report;
6671
}
67-
72+
6873
private static void setSubject(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
6974
X500Name x500name = cert.getSubject();
7075
RDN cn = x500name.getRDNs(BCStyle.CN)[0];
7176
report.setCommonNames(IETFUtils.valueToString(cn.getFirst().getValue()));
7277
}
73-
78+
7479
private static void setCommonNames(CertificateReportImplementation report,
7580
org.bouncycastle.asn1.x509.Certificate cert) {
7681
X500Name x500name = cert.getSubject();
7782
RDN cn = x500name.getRDNs(BCStyle.CN)[0];
7883
report.setCommonNames(IETFUtils.valueToString(cn.getFirst().getValue()));
7984
}
80-
85+
8186
private static void setAlternativeNames(CertificateReportImplementation report,
8287
org.bouncycastle.asn1.x509.Certificate cert) {
83-
88+
8489
}
85-
90+
8691
private static void setValidFrom(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
8792
report.setValidFrom(cert.getStartDate().getDate());
8893
}
89-
94+
9095
private static void setValidTo(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
9196
report.setValidTo(cert.getEndDate().getDate());
9297
}
93-
98+
9499
private static void setPubkey(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
95100
try {
96101
X509Certificate x509Cert = new X509CertificateObject(cert);
@@ -99,15 +104,15 @@ private static void setPubkey(CertificateReportImplementation report, org.bouncy
99104
// TODO log could not set public key
100105
}
101106
}
102-
107+
103108
private static void setWeakDebianKey(CertificateReportImplementation report,
104109
org.bouncycastle.asn1.x509.Certificate cert) {
105110
}
106-
111+
107112
private static void setIssuer(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
108113
report.setIssuer(cert.getIssuer().toString());
109114
}
110-
115+
111116
private static void setSignatureAndHashAlgorithm(CertificateReportImplementation report,
112117
org.bouncycastle.asn1.x509.Certificate cert) {
113118
String sigAndHashString = null;
@@ -129,34 +134,43 @@ private static void setSignatureAndHashAlgorithm(CertificateReportImplementation
129134
LOGGER.debug("Could not extraxt SignatureAndHashAlgorithm from String:" + sigAndHashString, E);
130135
}
131136
}
132-
137+
133138
private static void setExtendedValidation(CertificateReportImplementation report,
134139
org.bouncycastle.asn1.x509.Certificate cert) {
135-
140+
136141
}
137-
142+
138143
private static void setCeritifcateTransparency(CertificateReportImplementation report,
139144
org.bouncycastle.asn1.x509.Certificate cert) {
140145
}
141-
146+
142147
private static void setOcspMustStaple(CertificateReportImplementation report,
143148
org.bouncycastle.asn1.x509.Certificate cert) {
144149
}
145-
150+
146151
private static void setCRLSupported(CertificateReportImplementation report,
147152
org.bouncycastle.asn1.x509.Certificate cert) {
148153
}
149-
154+
150155
private static void setOcspSupported(CertificateReportImplementation report,
151156
org.bouncycastle.asn1.x509.Certificate cert) {
152157
}
153-
158+
154159
private static void setRevoked(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
155160
}
156-
161+
157162
private static void setDnsCCA(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
158163
}
159-
164+
160165
private static void setTrusted(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
161166
}
167+
168+
private static void setSha256Hash(CertificateReportImplementation report, org.bouncycastle.asn1.x509.Certificate cert) {
169+
try {
170+
report.setSha256FingerprintHex(DatatypeConverter.printHexBinary(
171+
MessageDigest.getInstance("SHA-256").digest(cert.getEncoded())).toLowerCase());
172+
} catch (IOException | NoSuchAlgorithmException e) {
173+
LOGGER.warn("Could not create SHA-256 Hash", e);
174+
}
175+
}
162176
}

src/main/java/de/rub/nds/tlsscanner/probe/certificate/CertificateReportImplementation.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
package de.rub.nds.tlsscanner.probe.certificate;
1010

1111
import de.rub.nds.tlsattacker.core.constants.SignatureAndHashAlgorithm;
12+
1213
import java.security.PublicKey;
1314
import java.util.Date;
1415
import org.bouncycastle.asn1.x509.Certificate;
1516

17+
1618
/**
1719
*
1820
* @author Robert Merget - [email protected]
@@ -37,6 +39,7 @@ class CertificateReportImplementation implements CertificateReport {
3739
private Boolean dnsCAA;
3840
private Boolean trusted;
3941
private Certificate certificate;
42+
private String sha256FingerprintHex;
4043

4144
public CertificateReportImplementation() {
4245
}
@@ -46,6 +49,15 @@ public Certificate getCertificate() {
4649
return certificate;
4750
}
4851

52+
@Override
53+
public String getSHA256Fingerprint() {
54+
return sha256FingerprintHex;
55+
}
56+
57+
public void setSha256FingerprintHex(String sha256FingerprintHex) {
58+
this.sha256FingerprintHex = sha256FingerprintHex;
59+
}
60+
4961
public void setCertificate(Certificate certificate) {
5062
this.certificate = certificate;
5163
}
@@ -206,6 +218,7 @@ public void setTrusted(Boolean trusted) {
206218
@Override
207219
public String toString() {
208220
StringBuilder builder = new StringBuilder();
221+
builder.append("Fingerprint: ").append(sha256FingerprintHex).append("\n");
209222
if (subject != null) {
210223
builder.append("Subject: ").append(subject).append("\n");
211224
}

0 commit comments

Comments
 (0)