Hi,<br><br>My perusal of the observatory data is that the acerts and vcerts tables include the issuing cert and a flag indicating whether or not the given SSL cert is in the mozilla or microsoft trusted root repositories. But, the issuing cert is usually just an intermediate cert unless a misbehaving root CA is directly signing SSL certs. What I really want to know is which particular root cert in the mozilla/microsoft root repositories is vouching for a SSL cert.<br>
<br>Currently, this doesn't appear to be possible because the openssl verify command at the heart of the observatory scripts doesn't print out which root CA in it's CApath directory actually issued the cert. This patch modifies the verify application so that when the 'verbose' flag is passed to the verify command, the issuer of the self-signed certificate at the top of the chain is printed. This patch applies to the latest 1.0.0d version of OpenSSL. I feel pretty confident in this patch as I tested it against debug printouts that I added to the raw X509_verify_cert function in x509_vfy.c<br>
<br>To really make this patch useful, additional fields would have to be added to the acerts/vcerts tables to store the root issuing cert name and the python scripts would have to be re-run. I'll probably work on that over the next few days myself, but if anyone out there with a EC2 account that is more handy with the data/scripts could probably apply this patch and make a new snapshot of the data for us all to use.<br>
<br>And I really hope I didn't miss something obvious and this data is captured somewhere else that I just plainly missed.<br><br>Thanks,<br>Walter<br><br>--- /home/wgoulet/Downloads/openssl-1.0.0d/apps/verify.c    2009-10-31 12:21:47.000000000 -0700<br>
+++ verify.c    2011-06-29 22:47:33.127029311 -0700<br>@@ -257,6 +257,7 @@<br>     {<br>     X509 *x=NULL;<br>     int i=0,ret=0;<br>+    char buf[2048];<br>     X509_STORE_CTX *csc;<br> <br>     x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file");<br>
@@ -280,6 +281,11 @@<br>     if (crls)<br>         X509_STORE_CTX_set0_crls(csc, crls);<br>     i=X509_verify_cert(csc);<br>+    X509_NAME_oneline(X509_get_issuer_name(csc->current_issuer),buf,2048);<br>+    if(v_verbose)<br>
+        {<br>+        fprintf(stdout,"Trusted certificate at top of chain: issuer= %s\n",buf);<br>+        }<br>     X509_STORE_CTX_free(csc);<br> <br>     ret=0;<br><br>