Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

server.h

Blame
  • certvalidator.c 14.79 KiB
    /**
        Example certifcate code
        gcc -o certexample certexample.c -lssl -lcrypto
    */
    #include <openssl/x509.h>
    #include <openssl/asn1.h>
    #include <openssl/crypto.h>
    #include <openssl/asn1t.h>
    #include <openssl/x509v3.h>
    #include <openssl/bio.h>
    #include <openssl/pem.h>
    #include <openssl/err.h>
    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    #include <time.h>
    #include <openssl/asn1_mac.h>
    #define DEBUG 0
    #define LINE_BUFFER 100
    
    const ASN1_TIME *X509_get0_notBefore(const X509 *x);
    char** str_split(const char* a_str, const char a_delim);
    char* concat(char *s1, char *s2);
    char* get_basic_constraints(X509 *cert);
    char* get_key_usage(X509 *cert);
    char* compare_not_before(X509 *cert);
    char* compare_not_after(X509 *cert);
    char* get_SAN(X509 *cert);
    char *get_domain_name(X509 *cert);
    int matches_subject_alternative_name(const char *hostname, X509 *server_cert);
    int get_public_key_length(X509 *cert);
    int validate_basic_constraints(char* basic_constraints);
    int validate_key_usage(char* key_usage);
    int validate_key_length(int length);
    int validate_CN(const char* hostname, char*cn);
    int validate_wildcard_string(const char *hostname, char*hostname_with_wildcard);
    int validate_CN_and_SAN(const char *url, X509 *cert);
    int validate_not_before(X509 *cert);
    int validate_not_after(X509 *cert);
    int validate_certificate(const char *url, X509 *cert);
    int find_first_instanceof(const char *str, char delim);
    char *str_slice_to_end(const char *str, int begin);
    
    int main(int argc, char **argv){
    
        char line[LINE_BUFFER];
        //open the file, create the file to write to
        FILE *csv_input = fopen(argv[1], "r");
        FILE *csv_output = fopen("output_test.csv" ,"w");
        //for each line in the csv file, process each certificate
        OpenSSL_add_all_algorithms();
        ERR_load_BIO_strings();
        ERR_load_crypto_strings();
    
        int n = 0;
        while (fgets(line, LINE_BUFFER, csv_input) != NULL){
    
            if(DEBUG){
                printf("CSV LINE # %d\n", n);
            }
    
            //init all the things we use to describe a certificate
            BIO *certificate_bio = NULL;
            X509 *cert = NULL;
            X509_NAME *cert_issuer = NULL;
            X509_CINF *cert_inf = NULL;
            STACK_OF(X509_EXTENSION) * ext_list;
            certificate_bio = BIO_new(BIO_s_file());
            //here we are able to access each line