Openssl 我正在尝试实现一对AWS服务器,它们使用SSL创建自签名证书以在它们之间通信一些数据

Openssl 我正在尝试实现一对AWS服务器,它们使用SSL创建自签名证书以在它们之间通信一些数据,openssl,ada,Openssl,Ada,我能够创建一个hello world示例程序,该程序只需使用AWS服务器进行通信 但现在我尝试使用自签名证书通过安全的RSA 2048连接进行通信。有人能指导我如何在Ada中创建自签名证书并在我的服务器程序中使用它吗 ------------------------------------------------------------------------------ -- Ada Web Server -------------

我能够创建一个hello world示例程序,该程序只需使用AWS服务器进行通信

但现在我尝试使用自签名证书通过安全的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;
------------------------------------------------------------------------------
--AdaWeb服务器
------------------------------------------------------------------------------
Com_1.adb
--
首先启动Com_1,然后启动Com_2。
--
--假设您将在computer1上启动com_1,在Computer2上启动com_2
--计算机2。然后,启动演示的命令是:
--
--在计算机1上:
--$com_1计算机2
--
--在计算机2上:
--$com_2计算机1
--
使用Ada.Command_行;
使用Ada.Strings.Unbounded;
使用Ada.Text_IO;
与AWS.Communication.Client;
使用AWS.Communication.Server;
与AWS.回应;
使用AWS.Utils;
程序Com_1为
使用Ada;
使用Ada.Strings.Unbounded;
使用自动气象站;
类型String\u Access是Access all String;
N:自然值:=0;
等待:布尔:=True;
最后收到的消息:布尔值:=False;
函数接收
(服务器:字符串;
消息:字符串;
状态:非空访问字符串;
参数:Communication.Parameter\u Set
:=通信。空(参数集)
返回响应数据;
--通信回调
-------------
--接收--
-------------
函数接收
(服务器:字符串;
消息:字符串;
状态:非空访问字符串;
参数:Communication.Parameter\u Set
:=通信。空(参数集)
返回响应。数据为
开始
等待:=假;
文本输入输出行(“服务器”和服务器
&“向我发送消息”&消息);
文本输入行(“状态”和状态全部);
文本输入新行;
--返回Response.Build(“text/html”、“Ans[”&Utils.Image(N)&']);
返回Response.Build(“text/html”、“Hello”);
结束接收;
名称:别名字符串:=“com_1,本地服务器1”;
包本地_服务器是
新的通信服务器(字符串、字符串访问、接收);
答:回答。数据;
K:整数:=1;
开始
如果Command_Line.Argument_Count=0,则
Text_IO.Put_行(“用法:com_1”);
返回;
如果结束;
Local_Server.Start(1234,Name'Access);
--等待com_2激活
whilewait循环
延迟1.0;
端环;
--发送一些消息
--在1.中为K。。10圈
回答:=Communication.Client.Send_Message
(命令行参数(1),3456,“消息”和Utils.Image(K),
通信参数(“参数1.”和实用图像(K),
“param2.”&Utils.Image(K));
Text_IO.Put_行(“
我认为您需要展示您目前的工作,例如,这两个程序相互交流“hello world”;我应该添加什么来通过SSL安全地执行相同的操作?@BrianDrummond我已经添加了代码。@BrianDrummond我也不知道如何对证书进行自签名。你能告诉我怎么做吗?获得了这个链接并尝试配置如何自签名证书,但没有成功..怎么办?(我是通过谷歌“创造自我”找到的