Here's a new tool I just open sourced: certdiff.
It's a very simple bash script that solves an annoying problem for me. If I want to diff 2 certificate files, I can't just run the
diff tool. After all, certificates look like this.
-----BEGIN CERTIFICATE----- MIIFFDCCA/ygAwIBAgISAYYqv7v7f0f38l+hU0J5/iCwMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTAeFw0xNjAyMTUwODQ4MDBaFw0x ... OxSCq8jsCMKYcRanY/CKgYkzENLMtKZnPkLTDfl8IbVGXgHxTMZmU3XoV+qdK9A0 ko99LNSWpHNKF2kEm/UXGVmfFfBovRCmejGZzjzS0VCtlO86oYcVKZYAOBMz21Eq UKiESWnXfaQbCnmcOB3P+LLRg8uIluQVozktJ6FIgsR3WXvV/qiP/tnjMX3BsOtW 4CPevXtyb/k= -----END CERTIFICATE-----
diff 2 of those similar files, it would just report a difference on every line -- but you still don't know which data is different.
Or in other words: if you're renewing or reinstalling a certificate, are you sure your domain name, SANs, ... are all the same? You can parse the certificates with openssl and manually check them. Or, you can use
$ certdiff cronweekly.com/cert.pem sysca.st/cert.pem subject= /CN=cronweekly.com | subject= /CN=sysca.st notBefore=Feb 15 08:48:00 2016 GMT | notBefore=Feb 15 09:11:00 2016 GMT notAfter=May 15 08:48:00 2016 GMT | notAfter=May 15 09:11:00 2016 GMT
The result is much cleaner and just shows the differences of the actual certificate, not just its encoded result.
Certdiff is available as open source on github as mattiasgeniar/certdiff.