/* Test that reading a custom CA certificate file works. */ static void test_ssl_cert_subject(CuTest *tc) { apr_hash_t *subject; serf_ssl_certificate_t *cert = NULL; apr_status_t status; apr_pool_t *test_pool = test_setup(); status = serf_ssl_load_cert_file( &cert, get_ca_file(test_pool, "test/serftestca.pem"), test_pool); CuAssertIntEquals(tc, APR_SUCCESS, status); CuAssertPtrNotNull(tc, cert); subject = serf_ssl_cert_subject(cert, test_pool); CuAssertStrEquals(tc, "Test Suite", apr_hash_get(subject, "OU", APR_HASH_KEY_STRING)); CuAssertStrEquals(tc, "In Serf we trust, Inc.", apr_hash_get(subject, "O", APR_HASH_KEY_STRING)); CuAssertStrEquals(tc, "Mechelen", apr_hash_get(subject, "L", APR_HASH_KEY_STRING)); CuAssertStrEquals(tc, "Antwerp", apr_hash_get(subject, "ST", APR_HASH_KEY_STRING)); CuAssertStrEquals(tc, "BE", apr_hash_get(subject, "C", APR_HASH_KEY_STRING)); CuAssertStrEquals(tc, "*****@*****.**", apr_hash_get(subject, "E", APR_HASH_KEY_STRING)); test_teardown(test_pool); }
static apr_status_t print_certs(void *data, int failures, int error_depth, const serf_ssl_certificate_t * const * certs, apr_size_t certs_len) { apr_pool_t *pool; const serf_ssl_certificate_t *current; apr_pool_create(&pool, NULL); fprintf(stderr, "Received certificate chain with length %d\n", (int)certs_len); print_ssl_cert_errors(failures); if (failures) fprintf(stderr, "Error at depth=%d\n", error_depth); else fprintf(stderr, "Chain provided with depth=%d\n", error_depth); while ((current = *certs) != NULL) { apr_hash_t *issuer, *subject, *serf_cert; apr_array_header_t *san; subject = serf_ssl_cert_subject(current, pool); issuer = serf_ssl_cert_issuer(current, pool); serf_cert = serf_ssl_cert_certificate(current, pool); fprintf(stderr, "\n-----BEGIN CERTIFICATE-----\n"); fprintf(stderr, "Hostname: %s\n", (const char *)apr_hash_get(subject, "CN", APR_HASH_KEY_STRING)); fprintf(stderr, "Sha1: %s\n", (const char *)apr_hash_get(serf_cert, "sha1", APR_HASH_KEY_STRING)); fprintf(stderr, "Valid from: %s\n", (const char *)apr_hash_get(serf_cert, "notBefore", APR_HASH_KEY_STRING)); fprintf(stderr, "Valid until: %s\n", (const char *)apr_hash_get(serf_cert, "notAfter", APR_HASH_KEY_STRING)); fprintf(stderr, "Issuer: %s\n", convert_organisation_to_str(issuer, pool)); san = apr_hash_get(serf_cert, "subjectAltName", APR_HASH_KEY_STRING); if (san) { int i; for (i = 0; i < san->nelts; i++) { char *s = APR_ARRAY_IDX(san, i, char*); fprintf(stderr, "SubjectAltName: %s\n", s); } } fprintf(stderr, "%s\n", serf_ssl_cert_export(current, pool)); fprintf(stderr, "-----END CERTIFICATE-----\n"); ++certs; } apr_pool_destroy(pool); return APR_SUCCESS; }