#include #include #include #include #include #include const char *certTxt = "-----BEGIN CERTIFICATE-----\n"\ "MIICMTCCAZoCCQD+KQjThaQoEDANBgkqhkiG9w0BAQUFADBdMQswCQYDVQQGEwJV\n"\ "UzETMBEGA1UECAwKU29tZS1TdGF0ZTENMAsGA1UEBwwETm9uZTEOMAwGA1UECgwF\n"\ "U3F1aWQxCzAJBgNVBAsMAml0MQ0wCwYDVQQDDARub25lMB4XDTEzMDUxMDE0MjUz\n"\ "N1oXDTE0MDUxMDE0MjUzN1owXTELMAkGA1UEBhMCVVMxEzARBgNVBAgMClNvbWUt\n"\ "U3RhdGUxDTALBgNVBAcMBE5vbmUxDjAMBgNVBAoMBVNxdWlkMQswCQYDVQQLDAJp\n"\ "dDENMAsGA1UEAwwEbm9uZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtSz4\n"\ "dQExZQ8mseCr9fwYD3OsIE7p0QvEb8QVQlrLeJ3nqalUb415cg+eyVn1ZAPU52si\n"\ "VebNlKRhIilZfyiwSEuxyyvfmcAVbAMjhwjAuPod8LtQneF9qbxRa4OjytQ1+v7h\n"\ "GFMmZECLvwF5+UUXgPPbFhcBd9gu32YdWs8ADJMCAwEAATANBgkqhkiG9w0BAQUF\n"\ "AAOBgQAqxsFSwhSJkolHtOev4jlk2JqpLcUHq6IpVbfpou7YM2Ca5sSKMf9/mjoY\n"\ "kRyhg6TX/1ymde1V1tA80DjIZYiF/m4YLwsSJVV2hE4lja/e8CvBLzeTSPe3S0rH\n"\ "cWcRnuH9ts0PRPUD0NxZejib4F8m7hI2emm5d56xizvYooZzzg==\n"\ "-----END CERTIFICATE-----"; int main(int argc, char *argv[]) { // SSL_load_error_strings(); SSLeay_add_ssl_algorithms(); BIO *certBio = BIO_new(BIO_s_mem()); BIO_puts(certBio, certTxt); X509 * cert = NULL; if (!PEM_read_bio_X509(certBio, &cert, 0, 0)) { fprintf(stderr, "Error building certificate\n"); return -1; } SSL_CTX *sslContext = SSL_CTX_new(SSLv3_method()); if (!sslContext) { fprintf(stderr, "Error creating ssl context\n"); return -1; } if (!SSL_CTX_use_certificate(sslContext, cert)) { fprintf(stderr, "Error attaching certificate to ssl context\n"); return -1; } X509 ***pCert = (X509 ***)sslContext->cert; X509 *sslCtxCert = pCert && *pCert ? **pCert : NULL; if (sslCtxCert != cert) { fprintf(stderr, "Geting certificate dicectly from SSL_CTX object failed!\n"); return 1; } SSL *ssl = SSL_new(sslContext); if (!ssl) { fprintf(stderr, "Error creating ssl object\n"); return -1; } X509 * sslCert = SSL_get_certificate(ssl); if (sslCert != cert) { fprintf(stderr, "SSL_get_certificate failed!\n"); return 1; } pCert = (X509 ***)ssl->cert; sslCert = pCert && *pCert ? **pCert : NULL; if (sslCert != cert) { fprintf(stderr, "Geting certificate dicectly from ssl object failed!\n"); return 1; } return 0; }