C で Mongoose Web サーバー API を使用して、小さな HTTP API を実装します。これまでのところ問題なく動作していますが、SSL を使用したい場合、サーバーは要求を拒否します。
SSL キーと証明書を生成するために、次のアプローチを使用しました。
# openssl version
OpenSSL 1.0.0-beta2 21 Apr 2009
# openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 1000 -nodes
# cat key.pem > ssl.pem; cat cert.pem >> ssl.pem
このマニュアルによると、マングースはキーと証明書を 1 つのファイルに収めたいと考えています。
また、NS_ENABLE_SSL
コンパイル フラグを設定して、mongoose の ssl 部分を有効にしました。
マングースを初期化するには、C ソースで次のようにします。
struct mg_server *server;
server = mg_create_server(NULL, ev_handler);
printf("%s",mg_set_option(server, "document_root", "/var/www"));
printf("%s",mg_set_option(server, "listening_port", "80"));
printf("%s",mg_set_option(server, "ssl_certificate", "ssl.pem"));
私のイベントハンドラーは、現時点ではコンソールにリクエストを記録するだけです:
static int ev_handler(struct mg_connection *conn, enum mg_event ev) {
switch(ev){
case MG_AUTH: printf("MG_AUTH event handler called with uri = '%s'\n", conn->uri);
break;
case MG_REQUEST:
printf("MG_REQUEST event handler called with uri = '%s'\n", conn->uri);
break;
case MG_POLL:
printf("MG_POLL event handler called with uri = '%s'\n", conn->uri);
break;
case MG_HTTP_ERROR:
printf("MG_HTTP_ERROR event handler called with uri = '%s'\n", conn->uri);
break;
default:
DBG("MG_CLOSE event handler called with uri = '%s'\n", conn->uri);
break;
}
return MG_FALSE;
}
ブラウザーでドキュメント ルートから HTML ファイルを開こうとすると、サーバーはコンテンツを配信せずに接続を閉じます。
コンソール出力:
(null)
(null)
(null)
MG_POLL event handler called with uri = '(null)'
MG_CLOSE event handler called with uri = '(null)'
NULL
最初の 3 つ (null) は、オプションの設定中に問題が発生しなかった場合の mg_set_option からの戻り値です。
ここで何がうまくいかないのですか?