OpenSSL APIを試してみた

以下のdeveloperworks記事を参考にOpenSSL APIを試してみた。

www.ibm.com

今回は"SSL_CTX_load_verify_locations"(証明書の検証)に関する部分のメモ

Verisignのサイトで試してみた。

f:id:ichou1:20170820102708p:plain

f:id:ichou1:20170820103358p:plain

以下のコードに、エクスポートした各階層の証明書を入力して、

/* Load the trust store */
int ret = SSL_CTX_load_verify_locations(*pctx,"エクスポートした証明書", NULL);

返ってくる結果を確認する。

/* Check the certificate */
long RET = SSL_get_verify_result(ssl);
fprintf(stderr, "[DEBUG]verify return: %ld\n", RET);
fprintf(stderr, "[DEBUG]reason: %s\n", X509_verify_cert_error_string(RET));
  • Case 1 "wwwverisigncom.crt"を指定

[DEBUG]verify return: 20
[DEBUG]reason: unable to get local issuer certificate

→信頼できるルート証明書がない?

  • Case 2 "SymantecClass3ExtendedValidationSHA256SSLCA.crt"を指定

[DEBUG]verify return: 2
[DEBUG]reason: unable to get issuer certificate

→証明書の発行者が取得できない?証明書chainの検証でつまづいた?

  • Case 3 "VeriSignUniversalRootCertificationAuthority.crt"を指定

[DEBUG]verify return: 0
[DEBUG]reason: ok

→証明書chainは妥当だし、信頼できるルート証明書


以下をチェックしている

  • ルートCA証明書が信頼できるか
  • 証明書chainが正しいか