Skip to content

Instantly share code, notes, and snippets.

@sankar4n
Created September 1, 2016 13:14
Show Gist options
  • Save sankar4n/71a43fb8cb22006f59ccbd1485dba65b to your computer and use it in GitHub Desktop.
Save sankar4n/71a43fb8cb22006f59ccbd1485dba65b to your computer and use it in GitHub Desktop.
Extracts public key has for HPKP Pinning
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.Base64;
/*
* Extracts public key has for HPKP Pinning
* Usage: java PeerCertificateExtractor <Path to certificate>
*/
public class PeerCertificateExtractor {
public static void main(String[] args) {
String publicKey = extract(new File(args[0]));
System.out.println(publicKey);
}
/**
* Get peer certificate(Public key to sha256 to base64)
* @param certificate Crt or der or pem file with a valid certificate
* @return
*/
public static String extract(File certificate){
FileInputStream inputStream = null;
try{
inputStream = new FileInputStream(certificate);
X509Certificate x509Certificate = (X509Certificate) CertificateFactory.getInstance("X509")
.generateCertificate(inputStream);
byte[] publicKeyEncoded = x509Certificate.getPublicKey().getEncoded();
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte[] publicKeySha256 = messageDigest.digest(publicKeyEncoded);
byte[] publicKeyShaBase64 = Base64.getEncoder().encode(publicKeySha256);
return "sha256/" + new String(publicKeyShaBase64);
}catch (Exception e){
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return "";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment