00001 #include "wvargs.h"
00002 #include "wvcrash.h"
00003 #include "wvfile.h"
00004 #include "wvlog.h"
00005 #include "wvstrutils.h"
00006 #include "wvx509.h"
00007
00008 void print_details(WvX509 *x509)
00009 {
00010 wvcon->print("Subject: %s\n", x509->get_subject());
00011 wvcon->print("Issuer: %s\n", x509->get_issuer());
00012 wvcon->print("Serial: %s\n", x509->get_serial());
00013 time_t t1 = x509->get_notvalid_before();
00014 time_t t2 = x509->get_notvalid_after();
00015
00016 wvcon->print("Not Valid Before: %s\n", ctime(&t1));
00017 wvcon->print("Not Valid After: %s\n", ctime(&t2));
00018 wvcon->print("Key Usage: %s\n", x509->get_key_usage());
00019 wvcon->print("Ext Key Usage: %s\n", x509->get_ext_key_usage());
00020 wvcon->print("Authority Info Access: \n%s\n", x509->get_aia());
00021 WvStringList list;
00022 x509->get_ca_urls(list);
00023 wvcon->print("CA Issuers available from:\n%s\n", list.join("\n"));
00024 list.zap();
00025 x509->get_ocsp(list);
00026 wvcon->print("OCSP Responders available from:\n%s\n", list.join("\n"));
00027 list.zap();
00028 x509->get_crl_urls(list);
00029 wvcon->print("CRL Distribution Points:\n%s\n", list.join("\n"));
00030 list.zap();
00031 x509->get_policies(list);
00032 wvcon->print("Certificate Policy OIDs:\n%s\n", list.join("\n"));
00033
00034 int requireExplicitPolicy, inhibitPolicyMapping;
00035 x509->get_policy_constraints(requireExplicitPolicy, inhibitPolicyMapping);
00036 wvcon->print("Certificate Policy Constraints: requireExplicitPolicy: %s "
00037 "inhibitPolicyMapping: %s\n", requireExplicitPolicy,
00038 inhibitPolicyMapping);
00039
00040 WvX509::PolicyMapList maplist;
00041 x509->get_policy_mapping(maplist);
00042 wvcon->print("Policy mappings:\n");
00043 WvX509::PolicyMapList::Iter i(maplist);
00044 for (i.rewind(); i.next();)
00045 wvcon->print("%s -> %s\n", i().issuer_domain, i().subject_domain);
00046 }
00047
00048
00049 int main(int argc, char **argv)
00050 {
00051 wvcrash_setup(argv[0]);
00052
00053 WvString certtype = "pem";
00054 WvStringList remaining_args;
00055
00056 WvArgs args;
00057 args.add_required_arg("certificate");
00058 args.add_option('t', "type", "Certificate type: der or pem (default: pem)",
00059 "type", certtype);
00060 if (!args.process(argc, argv, &remaining_args) || remaining_args.count() < 1)
00061 {
00062 args.print_help(argc, argv);
00063 return -1;
00064 }
00065
00066 #if 0
00067 WvX509 x509;
00068 if (certtype == "der")
00069 x509.load(WvX509Mgr::CertDER, remaining_args.popstr());
00070 else if (certtype == "pem")
00071 x509.load(WvX509Mgr::CertPEM, remaining_args.popstr());
00072 else
00073 {
00074 wverr->print("Invalid certificate type '%s'\n", certtype);
00075 return -1;
00076 }
00077
00078 if (x509.isok())
00079 print_details(&x509);
00080 else
00081 wverr->print("X509 certificate not valid\n");
00082 #endif
00083 return 0;
00084 }