Show SHA-256 thumbprint of certificate instead of MD5

Also formats hex-output in a monospaced font and wraps it.

Closes #173
master
Ingo Bauersachs 10 years ago
parent 236849354a
commit 789022ba3b

@ -288,11 +288,11 @@ private void renderX509(StringBuilder sb, X509Certificate certificate)
addTitle(sb, R.getI18NString("service.gui.CERT_INFO_FINGERPRINTS"));
try
{
String sha256String = getThumbprint(certificate, "SHA-256");
String sha1String = getThumbprint(certificate, "SHA1");
String md5String = getThumbprint(certificate, "MD5");
addField(sb, "SHA1:", sha1String);
addField(sb, "MD5:", md5String);
addField(sb, "SHA256:", sha256String, 48);
addField(sb, "SHA1:", sha1String, 32);
}
catch (CertificateException e)
{
@ -346,11 +346,12 @@ else if(certificate.getPublicKey().getAlgorithm().equals("DSA"))
addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN"),
R.getI18NString(
"service.gui.CERT_INFO_KEY_BYTES_PRINT",
"service.gui.CERT_INFO_KEY_BITS_PRINT",
new String[]{
String.valueOf(certificate.getSignature().length),
getHex(certificate.getSignature())
String.valueOf(certificate.getSignature().length*8),
}));
addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN"),
getHex(certificate.getSignature()), 48);
sb.append("</table>\n");
}
@ -376,12 +377,43 @@ private void addTitle(StringBuilder sb, String title)
*/
private void addField(StringBuilder sb, String field, String value)
{
sb.append("<tr>")
.append("<td style='margin-left: 5pt; margin-right: 25pt;")
.append(" white-space: nowrap'>")
.append(field).append("</td>")
.append("<td>").append(value).append("</td>")
.append("</tr>\n");
addField(sb, field, value, 0);
}
/**
* Add a field.
* @param sb StringBuilder to append to
* @param field name of the certificate field
* @param value to print
* @param wrap force-wrap after number of characters
*/
private void addField(StringBuilder sb, String field, String value,
int wrap)
{
sb.append("<tr><td style='margin-left: 5pt; margin-right: 25pt;")
.append("white-space: nowrap' valign='top'>")
.append(field).append("</td><td");
if (wrap > 0)
{
sb.append(" style='font-family:monospace'>");
for (int i = 0; i < value.length(); i++)
{
if (i % wrap == 0 && i > 0)
{
sb.append("\n");
}
sb.append(value.charAt(i));
}
}
else
{
sb.append(">");
sb.append(value);
}
sb.append("</td></tr>\n");
}
/**
@ -399,13 +431,13 @@ private String getHex( byte [] raw )
try
{
for (byte b : raw)
f.format("%02x", b);
f.format("%02X:", b);
}
finally
{
f.close();
}
return hex.toString();
return hex.substring(0, hex.length() - 1);
}
/**
@ -429,19 +461,21 @@ private static String getThumbprint(X509Certificate cert, String algorithm)
{
throw new CertificateException(e);
}
byte[] encodedCert = cert.getEncoded();
StringBuilder sb = new StringBuilder(encodedCert.length * 2);
Formatter f = new Formatter(sb);
try
{
for (byte b : digest.digest(encodedCert))
f.format("%02x", b);
f.format("%02X:", b);
}
finally
{
f.close();
}
return sb.toString();
return sb.substring(0, sb.length() - 1);
}
/**

Loading…
Cancel
Save