gpt4 book ai didi

ssl - 安装 SSL 证书并运行 nitrogen webframe work over cowboy server over https

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:54 25 4
gpt4 key购买 nike

我正在牛仔网络服务器上使用氮气网络框架开发一个应用程序。当我通过 http 运行服务器时,它运行良好。现在在生产中,应用程序必须在 https 上运行。

修改了nitrogen的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

我还修改了 nitrogen_sup.erl 文件中的 Supervisor 回调,该文件位于 nitrogen/site/scr 默认值

%% ===================================================================
%% 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() 文件编译并重新加载。但是我关闭了氮气并再次启动。

在 shell 中,我使用 curl 实用程序来测试服务器是否正在监听

$ curl --cacert Absolute_path/cacert.pem -i https://domainname.com

响应是正确的,因为索引页上的内容显示在 shell 中

但是,当我转到 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

现在我不明白的是服务器是否拒绝了我的证书或者我跳过了一步,或者一两个步骤出错了或者问题出在我自己创建的 CA(根证书 cacert .pem) 或者问题出在 openSSL 上!

我现在开始怀疑如果我生成我的CSR 并将其发送到受信任的 CA,例如 symantec、digcert、thawte、geotrust 等.生成的证书也可能无法工作。

我需要你的帮助来解决这个 https of nitrogen over cowboy 网络服务器问题。感谢您到目前为止的所有帮助....

最佳答案

我不确定为什么 cowboy 会抛出那个特定的错误(tls_connection.erl 实际上是 Erlang 的一部分,而不是 Cowboy 或 Nitrogen)。

也就是说,当涉及到使用 Nitrogen 运行 SSL 时,我通常只是建议用户在 Nitrogen 之前使用 nginx 作为反向代理,并且在 Nitrogen 站点上有 nginx 配置示例 http://nitrogenproject.com/doc/config.html (向下滚动到仅 SSL 示例)。

我意识到这并不完全理想,所以或者,我会看看 nginx 或 apache 是否能够使用相同的 key /证书组合成功地提供示例页面。显然,“未知 ca”错误表明 Erlang 不喜欢它是自签名证书这一事实。因此,您可以尝试使用您可能拥有的其他签名证书/ key ,或者在 StartSSL.com 上免费生成一个真实的证书/ key ,然后查看错误是否继续出现。

同样,这些都不是可靠的答案,但它们应该可以帮助您指明多个方向,从而帮助您解决问题。

就个人而言,我在 nginx 后面运行我所有的 Nitrogen 实例,并让 nginx 处理 SSL 和负载平衡。

关于ssl - 安装 SSL 证书并运行 nitrogen webframe work over cowboy server over https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21952434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com