カウボーイ Web サーバー上で窒素 Web フレームワークを使用してアプリケーションを開発しています。httpでサーバーを実行すると、完全に機能します。現在、本番環境では、アプリケーションは https で実行する必要があります。
窒素のetcディレクトリにあるcowboy.configファイルをデフォルトから変更しました
% vim: ts=4 sw=4 et ft=erlang
[
{cowboy,[
{bind_address,"127.0.0.1"},
{port,80},
{server_name,nitrogen},
{document_root,"./site/static"},
%% some comments.........
{static_paths, ["/js/","/images/","/css/","/nitrogen/","/favicon.ico"]}
]}
].
これに
% vim: ts=4 sw=4 et ft=erlang
[
{cowboy,[
{bind_address,"127.0.0.1"},
{port,443},
{server_name,nitrogen},
{cacertfile, "Path/cacert.pem"},
{certfile, "Path/webservercert.pem"},
{keyfile, "Path/webserverkey.pem"},
{password, "webserverkeypassphrase"}
{document_root,"./site/static"},
%% some comments.........
{static_paths, ["/js/","/images/","/css/","/nitrogen/","/favicon.ico"]}
]}
].
Pathは、私が生成し、 openSSLを使用して自分で署名した SSL 証明書への絶対パスです。私は自分のサイト名を domainname.com としていますが、最初に openSSl ドキュメントに従って CA を作成します
また、窒素/サイト/scrにある窒素_sup.erlファイルのスーパーバイザー コールバックをデフォルトから変更しました。
%% ===================================================================
%% Supervisor callbacks
%% ===================================================================
init([]) ->
%% Start the Process Registry...
application:start(crypto),
application:start(nprocreg),
application:start(ranch),
%% Start Cowboy...
application:start(cowboy),
{ok, BindAddress} = application:get_env(cowboy, bind_address),
{ok, Port} = application:get_env(cowboy, port),
{ok, ServerName} = application:get_env(cowboy, server_name),
{ok, DocRoot} = application:get_env(cowboy, document_root),
{ok, StaticPaths} = application:get_env(cowboy, static_paths),
io:format("Starting Cowboy Server (~s) on ~s:~p, root: '~s'~n",
[ServerName, BindAddress, Port, DocRoot]),
Dispatch = init_dispatch(DocRoot, StaticPaths),
{ok, _} = cowboy:start_http(http, 100,
[
{port, Port}
], [
{env, [{dispatch, Dispatch}]},
{max_keepalive, 50}
]),
{ok, { {one_for_one, 5, 10}, []} }.
この下に
%% ===================================================================
%% Supervisor callbacks
%% ===================================================================
init([]) ->
%% Start the Process Registry...
application:start(crypto),
application:start(nprocreg),
application:start(ranch),
%% Start Cowboy...
application:start(cowboy),
{ok, BindAddress} = application:get_env(cowboy, bind_address),
{ok, Port} = application:get_env(cowboy, port),
{ok, ServerName} = application:get_env(cowboy, server_name),
{ok, DocRoot} = application:get_env(cowboy, document_root),
{ok, StaticPaths} = application:get_env(cowboy, static_paths),
{ok, CAcertfile} = application:get_env(cowboy, cacertfile),
{ok, Certfile} = application:get_env(cowboy, certfile),
{ok, Keyfile} = application:get_env(cowboy, keyfile),
{ok, Password} = application:get_env(cowboy, password),
io:format("Starting Cowboy Server (~s) on ~s:~p, root: '~s'~n",
[ServerName, BindAddress, Port, DocRoot]),
Dispatch = init_dispatch(DocRoot, StaticPaths),
{ok, _} = cowboy:start_https(https, 100,
[
{port, Port},
{cacertfile, CAcertfile},
{certfile, Certfile},
{keyfile, Keyfile},
{password, Password}
], [
{env, [{dispatch, Dispatch}]},
{max_keepalive, 50}
]),
{ok, { {one_for_one, 5, 10}, []} }.
sync:go() を使用すると、ファイルがコンパイルされてリロードされます。しかし、私は窒素を閉じて、再び始めました。
シェルでcurlユーティリティを使用して、サーバーがリッスンしているかどうかをテストします
$ curl --cacert Absolute_path/cacert.pem -i https://domainname.com
インデックス ページのコンテンツがシェルに表示されるため、応答は正です。
ただし、Firefox ブラウザーにアクセスすると、セキュリティ警告がスローされますが、その原因がわかっていることを除いて、例外に永続的に追加することを認めました。ページを再度取得しようとすると、ブラウザはこのエラーをスローします。
Secure Connection Failed
The key does not support the requested operation.
(Error code: sec_error_invalid_key)
.The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
.Please contact the website owners to inform them of this problem. Alternatively, use the command found in the help menu to report this broken site.
このエラーレポートが見つかった場合、窒素コンソールをチェックインしたとき
(nitrogen@127.0.0.1)4> user@user:~/nitrogen/rel/nitrogen$
user@user:~/nitrogen/rel/nitrogen$ sudo ./bin/nitrogen console
Exec: /home/user/nitrogen/rel/nitrogen/erts-5.10.4/bin/erlexec -boot /home/user/nitrogen/rel/nitrogen/releases/2.2.2/nitrogen -mode interactive -config /home/user/nitrogen/rel/nitrogen/etc/app.config -config /home/user/nitrogen/rel/nitrogen/etc/cowboy.config -config /home/user/nitrogen/rel/nitrogen/etc/sync.config -args_file /home/dotshule/nitrogen/rel/nitrogen/etc/vm.args -- console
Root: /home/dotshule/nitrogen/rel/nitrogen
Erlang R16B03 (erts-5.10.4) [source] [smp:2:2] [async-threads:5] [hipe] [kernel-poll:true]
Eshell V5.10.4 (abort with ^G)
(nitrogen@127.0.0.1)1> Starting Cowboy Server (nitrogen) on 127.0.0.1:443, root: './site/static'
=ERROR REPORT==== 20-Feb-2014::14:51:12 ===
SSL: certify: tls_connection.erl:375:Fatal error: unknown ca
今、私が理解していないのは、サーバーが私の証明書を拒否しているのか、ステップをスキップしたのか、1つまたは2つのステップが間違っていたのか、問題が自分で作成したCA(ルート証明書cacert.pem)にあるのか、それとも問題なのかということですはopenSSL上にあります!
CSRを生成し、それをsymantec、digcert、thawte、geotrust などの信頼できる CAに送信すると、疑わしいと思います。結果の証明書も機能しない可能性があります。
この https の窒素オーバー カウボーイ ウェブサーバーの問題について、あなたの助けが必要です。これまでのすべてのあなたの助けに感謝します....