Kaynağa Gözat

Metadata question: serial number, rsa pubkey.

XXX. note, here too I am not checking for the algorithm present
(if ec or rsa, or both, or whatever).
Michele Orrù 11 yıl önce
ebeveyn
işleme
dd762eaf3d
1 değiştirilmiş dosya ile 22 ekleme ve 4 silme
  1. 22 4
      src/questions/metadata.c

+ 22 - 4
src/questions/metadata.c

@@ -4,6 +4,7 @@
  *
  */
 
+#include <openssl/pem.h>
 #include <openssl/rsa.h>
 #include <openssl/x509.h>
 #include "qa/questions/questions.h"
@@ -11,9 +12,15 @@
 
 /* taken from openssl's s_client app source */
 #define BUFSIZE 1024*8
-
+/* for some reasons this is commented into openssl's source code x509.h */
 #define	X509_get_serialNumber(x) ((x)->cert_info->serialNumber)
 
+#define ISSUER  "issuer"
+#define SUBJECT "subject"
+#define SERIAL  "serial"
+#define BITLEN  "bitlen"
+#define PKEY    "public key"
+
 static BIO* out;
 
 static int
@@ -30,28 +37,39 @@ metadata_question_teardown(void)
   return BIO_free(out);
 }
 
-
 static int
 metadata_question_ask_crt(X509* crt)
 {
   EVP_PKEY* pkey = NULL;
+  BIGNUM *serial = NULL;
+  char *sserial = NULL;
   char buf[BUFSIZE];
 
   /* subject informations: country, organization, common name */
   X509_NAME_oneline(X509_get_subject_name(crt), buf, sizeof(buf));
-  BIO_printf(out, "s: %s\n", buf);
+  BIO_printf(out, "%-10s: %s\n", SUBJECT, buf);
 
 
   /* issuer informations: country, organization, common name */
   X509_NAME_oneline(X509_get_issuer_name(crt), buf, sizeof(buf));
+  BIO_printf(out, "%-10s: %s\n", ISSUER, buf);
 
   /* serial number */
+  serial = ASN1_INTEGER_to_BN(X509_get_serialNumber(crt), NULL);
+  sserial = BN_bn2hex(serial);
+  BIO_printf(out, "%-10s: %s\n", SERIAL, sserial);
+  OPENSSL_free(sserial);
+  BN_free(serial);
 
   /* public key */
   pkey = X509_get_pubkey(crt);
+  BIO_printf(out, "%-10s\n", PKEY);
+  PEM_write_bio_RSAPublicKey(out, pkey->pkey.rsa);
+  BIO_printf(out, "\r\n\r\n");
+
 
   /* public key bitlength */
-  BIO_printf(out, "bitlen: %d\n", EVP_PKEY_bits(pkey));
+  BIO_printf(out, "%-10s: %d\n", BITLEN, EVP_PKEY_bits(pkey));
 
   /* XXX.  Compression. TLS version.
    * This needs access to the socket.