ゲスト[ログイン]

おおいしゆうのASミュージックスコア登録CGI

おおいしゆうが日々のフォルテール演奏の記録を書き続けるCGI(日記じゃないです。blogでもないです)

工画堂スタジオ 『スマイル☆シューター ~ふぁーすと☆ちけっと~』OHP

パルフェ10周年ポータル パルフェ10周年寄せ書き企画

Aozora Melodyのパーフェクト動画公開中!

日 (今日 最終日)
日 ~ 日 (全部)
フォルテール総合情報サイト
ASミュージック
ポータル

同曲演奏状況
CSV登録
工画堂スタジオ&ヤマサ 『スマイル☆シューター ~ふぁーすと☆ちけっと~』応援中!
工画堂スタジオ 『ソルフェージュ~La finale~』OHP
暗号化だけする時は前のモノでOKですが、証明書の正当性を検証する時はSSL_connectした後に次のようにします。

int ret;
int verify_success=TRUE;
X509 *cert=SSL_get_peer_certificate(ssl);

// SSL_get_verify_resultで証明書を検証
// 返り値(エラーメッセージ)の意味はopenssl/err.hを見てください(爆)
if((ret=SSL_get_verify_result(ssl))!=X509_V_OK)
{
  fprintf(stderr,"Certification failed. (%d)\n",ret);
  verify_success=FALSE;  
};

// Common Name検証
// SubjectのCommonNameフィールドしか見てません。X509拡張による指定もあるようですけどよく分からないのでとりあえずパス
char buffer[256];
X509_NAME *xname=X509_get_subject_name(cert);
if(X509_NAME_get_text_by_NID(xname,NID_commonName,buffer,sizeof(buffer))==-1 || strcmp(buffer,ADDRESS))
{
  fprintf(stderr,"Can't find valid CommonName.\n");
  verify_success=FALSE;
};

if(!verify_success)
{
  X509_free(cert);
  SSL_shutdown(ssl);
  SSL_free(ssl);
  close(sock);
  SSL_CTX_free(ctx);
  ERR_free_strings();
  return -1;
};
X509_free(cert);



ちなみに証明書の内容を表示する時は次のようにすればOK
SSL* sslとX509 *cert=SSL_get_peer_certificate(ssl)を使って

printf("Encryption Method: %s\n",SSL_get_cipher(ssl));
printf("Encryption Protocol: %s\n",SSL_get_cipher_version(ssl));

// BIOというのはよく分からないけどI/Oのカプセル化でX509_get_...の返り値を表示するためのものらしい??
BIO *bio=BIO_new_fp(stdout,BIO_NOCLOSE);
BIO_printf(bio,"Cert Information:\n");
X509_NAME_print_ex(bio,X509_get_subject_name(cert),0,XN_FLAG_RFC2253);
BIO_printf(bio,"\n");
X509_NAME_print_ex(bio,X509_get_issuer_name(cert),0,XN_FLAG_RFC2253);
BIO_printf(bio,"\n");
BIO_printf(bio,"from: ");
ASN1_TIME_print(bio,X509_get_notBefore(cert));
BIO_printf(bio,"\nto: ");
ASN1_TIME_print(bio,X509_get_notAfter(cert));
BIO_printf(bio,"\n");
BIO_free(bio);
名前: ひとこと:
この記事へのトラックバックURL: https://www.asmusic.jp/ASHARD/score/tb.cgi/yu-oishi/20080710_2手動トラックバック