- - PR -
OpenSSL SSL_CTX_use_certificate_fileでエラー発生
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-22 15:59
こんにちわ、いつも勉強させて頂いています。
現在組み込み系のSSL対応を担当しているのですが、ポート443のコネクションを作成する部分で落ちてしまいます。 ソースを追っかけてゆくと、SSL_CTX_use_certificate_fileでエラーが帰ってきています。 ERR_print_errors_fpでエラーログを確認したところOpenSSLの中のbss_file.cの中で証明書の読み込み(fopen)で落ちていることが判明しました。 SSL_CTX_use_certificate_file関数はサーバー証明書をロードする関数なので、読み込みで落ちていることに納得がゆきません。 SSL_CTX_newでctxの取得は正常に行っていて、SSL_CTX_use_certificate_fileの第一引数にはSSL_CTX_newで取得したctx、第二引数にはサーバー証明書(server.crt)、第三引数にはSSL_FILETYPE_PEMを指定しています。 fopen('server.crt','r') で落ちている理由をご存知の方ご指南いただけますか? よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2006-11-23 00:24
どの環境で使ってるのかが不明なのであえて聞きますが。 fopen()ってなんですか。 #この聞き方で、部下にやな顔されたな〜。 #よくfopenはfopenですって逆切れされたな。 OpenSSLで組み込みで、かつSSLサーバとして使いますか。 あまりお勧めはしない使い方ではあります。 「出来ない」とは言いませんが、OpenSSLが0.9.8(NOT 1.0)であることは 無視されているようです。 内部ではUnixの実装を想定していることが多いのが「お勧め」しない 理由です。いいのかmalloc()で、というところですか。 | ||||||||||||
|
投稿日時: 2006-11-30 11:40
レス遅くなってすみません。かつ環境についても記述不足でしたね。 #部下にはよく環境を説明しろと言ってるくせに・・ まず、環境から ・WinXPでOpenSSL0.9.8bをデーモンにVxWorksを立てて行っています。 fopen()ですが、サーバー証明書を解析の為に開いている(開く)関数です。 fopen()についてはこれでよろしいでしょうか? bss_file.cの中で証明書を読み込んで解析してるようです。 現在ツールの会社に問い合わせをしているのですが、やはり組み込みでSSLサーバーという使用方法が他でも例がないようで、明確な回答が来ないで、チュートリアルが投げられてきました。(ため息) これから英文チュートリアルとマニュアルの翻訳解析です。 | ||||||||||||
|
投稿日時: 2006-11-30 21:44
VxWorksにfopen()があるのでしょうか。open()ならあるのかもしれませんが。。。 fopen()は暗黙の了解としてファイルシステムの存在を前提としてます。 最低限、STDIOを実装している関数でないと動かないはすですが。。 VxWorksのことは良く知りませんが。
bss_file.cに書いてある系統の関数群は、OSにより実装が異なるはすです。 いわゆるBIOライブラリのやつは、open,read,writeを関数ポインタで 持っておいてOSごとに違うのを使うようにしてあったはずですが。 typedef struct bio_method_st { int type; const char *name; int (*bwrite)(BIO *, const char *, int); int (*bread)(BIO *, char *, int); int (*bputs)(BIO *, const char *); int (*bgets)(BIO *, char *, int); long (*ctrl)(BIO *, int, long, void *); int (*create)(BIO *); int (*destroy)(BIO *); long (*callback_ctrl)(BIO *, int, bio_info_cb *); } BIO_METHOD; こんな様な構造体で関数ポインタを設定して、各BIO系内では BIO_ctrlで制御しているようです。 関数ポインタはソースを追う時には、あちこち飛んでよく分からなかった 記憶があります。 BIO_new_file()は使ってはいけなかったような。。。違ったかな。 | ||||||||||||
|
投稿日時: 2006-12-01 09:51
STDIOを実装、読み込み対象のファイルシステムは存在は確認しています。 読み込み対象のファイルシステムが サーバー証明書ファイル(Server.crt)になります。
このようなコードにて実装されてました。 static BIO_METHOD methods_filep= { BIO_TYPE_FILE, "FILE pointer", file_write, file_read, file_puts, file_gets, file_ctrl, file_new, file_free, NULL, };
飛び先は加納さんの仰るとおり、あちこち飛んでよく判らない状態です。 BIO_new_file()はしっかり使われていました。 まだ、英文マニュアル翻訳解析中でした・・・ | ||||||||||||
|
投稿日時: 2006-12-07 17:37
自己解決しました。
加納さんの仰るとおり、読み込みのターゲットファイルを認識していなかった為の現象でした。 ツールをいじってなんとか認識させ、ポート443を通しました。 ご指南ありがとうございました。 |
1