openssl - 我正在尝试实现一对使用 SSL 创建自签名证书以在它们之间传递一些数据的 AWS 服务器
问题描述
我能够创建一个简单地使用 AWS 服务器进行通信的 hello world 示例程序。
但现在我正在尝试使用自签名证书通过安全的 RSA 2048 连接进行通信。有人可以指导我如何在 Ada 中创建自签名证书并在我的服务器程序中使用它。
------------------------------------------------------------------------------
-- Ada Web Server
------------------------------------------------------------------------------
Com_1.adb
--
First launch Com_1 then Com_2.
--
-- Let's say that you will launch com_1 on computer1 and com_2 on
-- computer2. Then the commands to launch the demo are:
--
-- on computer1:
-- $ com_1 computer2
--
-- on computer2:
-- $ com_2 computer1
--
with Ada.Command_Line;
with Ada.Strings.Unbounded;
with Ada.Text_IO;
with AWS.Communication.Client;
with AWS.Communication.Server;
with AWS.Response;
with AWS.Utils;
procedure Com_1 is
use Ada;
use Ada.Strings.Unbounded;
use AWS;
type String_Access is access all String;
N : Natural := 0;
Wait : Boolean := True;
Last_Message_Received : Boolean := False;
function Receive
(Server : String;
Message : String;
State : not null access String;
Parameters : Communication.Parameter_Set
:= Communication.Null_Parameter_Set)
return Response.Data;
-- Communication callback
-------------
-- Receive --
-------------
function Receive
(Server : String;
Message : String;
State : not null access String;
Parameters : Communication.Parameter_Set
:= Communication.Null_Parameter_Set)
return Response.Data is
begin
Wait := False;
Text_IO.Put_Line ("Server " & Server
& " send me the message " & Message);
Text_IO.Put_Line ("State " & State.all);
Text_IO.New_Line;
--return Response.Build ("text/html", "Ans [" & Utils.Image (N) & ']');
return Response.Build ("text/html", "Hello");
end Receive;
Name : aliased String := "com_1, local server1";
package Local_Server is
new Communication.Server (String, String_Access, Receive);
Answer : Response.Data;
K : Integer := 1;
begin
if Command_Line.Argument_Count = 0 then
Text_IO.Put_Line ("Usage: com_1 <computer>");
return;
end if;
Local_Server.Start (1234, Name'Access);
-- Wait for com_2 to become active
while Wait loop
delay 1.0;
end loop;
-- Send some messages
--for K in 1 .. 10 loop
Answer := Communication.Client.Send_Message
(Command_Line.Argument (1), 3456, "mesSAGE" & Utils.Image (K),
Communication.Parameters ("param1." & Utils.Image (K),
"param2." & Utils.Image (K)));
Text_IO.Put_Line ("< reply " & Response.Message_Body (Answer));
-- end loop;
-- Exit when last message received
loop
exit when Last_Message_Received;
delay 3.0;
end loop;
Local_Server.Shutdown;
end Com_1;
--------------------------------------------------------------------------
com_2.adb
---------
with Ada.Command_Line;
with Ada.Strings.Unbounded;
with Ada.Text_IO;
with AWS.Communication.Client;
with AWS.Communication.Server;
with AWS.Response;
with AWS.Utils;
procedure Com_2 is
use Ada;
use Ada.Strings.Unbounded;
use AWS;
type String_Access is access all String;
N : Natural := 0;
Last_Message_Received : Boolean := False;
function Receive
(Server : String;
Message : String;
State : not null access String;
Parameters : Communication.Parameter_Set
:= Communication.Null_Parameter_Set)
return Response.Data;
-- Communication Callback
-------------
-- Receive --
-------------
function Receive
(Server : String;
Message : String;
State : not null access String;
Parameters : Communication.Parameter_Set
:= Communication.Null_Parameter_Set)
return Response.Data is
begin
Text_IO.Put_Line ("Server " & Server
& " send me the message " & Message);
Text_IO.Put_Line ("State " & State.all);
for K in Parameters'Range loop
Text_IO.Put_Line (" P" & Utils.Image (K) & " = "
& To_String (Parameters (K)));
end loop;
Text_IO.New_Line;
N := N + 1;
Text_IO.Put_Line ("================== " & Natural'Image (N));
if N = 10 then
Last_Message_Received := True;
end if;
return Response.Build ("text/html", "HELLO SERVER 1");
end Receive;
Name : aliased String := "com_2, local server1";
package Local_Server is
new Communication.Server (String, String_Access, Receive);
Answer : Response.Data;
K: Integer := 1;
begin
if Command_Line.Argument_Count = 0 then
Text_IO.Put_Line ("Usage: com_2 <computer>");
return;
end if;
Local_Server.Start (3456, Name'Access);
-- for K in 1 .. 10 loop
Answer := Communication.Client.Send_Message
(Command_Line.Argument (1), 1234, "mes2." & Utils.Image (K));
Text_IO.Put_Line ("< reply " & Response.Message_Body (Answer));
--end loop;
-- Exit when last message received
loop
exit when Last_Message_Received;
delay 4.0;
end loop;
Local_Server.Shutdown;
end Com_2;
解决方案
推荐阅读
- python - Python函数中的阴影参数
- python - 对 Bottle 服务器的缓慢请求
- c# - 有什么方法可以通过将 linq 查询分配给字符串类型的单个变量来清理我的代码?
- oracle - Oracle APEX 19.2 将应用程序移动到另一台主机
- stylus - Stylus destructurable params mixin (margin-side: auto)
- javascript - Lazysizes 等到图像在后台完全加载
- java - 有没有办法在 jinjava 中注册一个类?
- c++ - 我能保证nullptr的地址总是0吗?
- azure - 逻辑应用 SFTP - SSH 连接问题
- python - 简单的乘法和除法非常不准确