Я могу создать пример программы 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;