You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ada中创建自签名证书并用于AWS服务器的RSA 2048加密通信

嘿,我来帮你搞定在Ada AWS里配置RSA 2048自签名证书的事儿!咱们分两步走:先生成符合要求的证书,再把它集成到你的Hello World服务器程序里。

第一步:生成RSA 2048自签名证书

咱们用OpenSSL来生成证书,这是最方便的方式,AWS完美支持它生成的PEM格式文件。你可以直接在终端里跑下面的命令:

  • 一步生成私钥+证书(推荐):
    这条命令会直接生成2048位RSA私钥和有效期1年的自签名证书,省掉中间步骤:

    openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
    

    执行时会让你填写一些信息,比如国家、组织名,重点是Common Name要填你的AWS服务器的公网IP或者域名,客户端访问时会用到这个匹配。

  • 如果想分步生成(了解流程用):

    1. 生成2048位RSA私钥:
      openssl genrsa -out server.key 2048
      
    2. 生成证书签名请求(CSR):
      openssl req -new -key server.key -out server.csr
      
    3. 用私钥签名生成自签名证书:
      openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
      

生成后,你会得到server.key(私钥)和server.crt(证书)两个文件,把它们放到你的Ada程序运行目录里,或者记下绝对路径。

第二步:修改Ada AWS服务器程序,启用SSL加密

假设你原来的Hello World程序是基于AWS的基础HTTP服务器,现在我们要添加SSL配置。下面是修改后的完整示例代码,你可以直接参考调整:

with AWS.Server;
with AWS.Services.Dispatchers.Handler;
with AWS.Response;
with AWS.Status;
with AWS.Net.SSL;
with Ada.Text_IO; use Ada.Text_IO;

procedure Com_1 is
   use AWS;
   use AWS.Server;
   use AWS.Net.SSL;

   -- 原来的Hello World请求处理器
   function Hello_World (Request : Status.Data) return Response.Data is
   begin
      return Response.Build ("text/html", "<html><body><h1>Hello World (SSL Encrypted!) </h1></body></html>");
   end Hello_World;

   Server : HTTP;
   SSL_Settings : Config; -- SSL配置对象
begin
   -- 配置SSL核心参数
   Set_Mode (SSL_Settings, True); -- 开启SSL功能
   Set_Private_Key (SSL_Settings, "server.key"); -- 指定私钥文件路径
   Set_Certificate (SSL_Settings, "server.crt"); -- 指定证书文件路径
   Set_Session_Cache_Size (SSL_Settings, 100); -- 可选:设置SSL会话缓存大小,提升性能

   -- 配置服务器的基础参数+SSL配置
   Configure (Server,
              Port => 443, -- HTTPS默认端口,测试也可以用8443这类非特权端口
              Max_Connection => 10,
              SSL_Config => SSL_Settings);

   -- 设置请求处理器,关联到Hello_World函数
   Set_Dispatcher (Server, Services.Dispatchers.Handler.Create (Hello_World'Unrestricted_Access));

   -- 启动服务器
   Start (Server);
   Put_Line ("SSL Server started! Access it at https://your-server-ip:443");
   Put_Line ("Press Enter to stop the server...");
   Skip_Line;

   -- 停止服务器
   Stop (Server);
end Com_1;

编译运行注意事项

  • 如果用GNAT编译,要确保链接AWS的SSL库,命令大概是:
    gnatmake com_1.adb -largs -laws -laws_ssl
    
    如果你用Alire来管理Ada项目,直接跑alire build就行,它会自动处理依赖和链接参数。
  • 证书和私钥的路径要正确:如果程序不在证书所在目录,就用绝对路径(比如"/home/ec2-user/server.key")。
  • 客户端访问时,因为是自签名证书,浏览器或客户端会提示“不安全”,这是正常的——测试环境忽略就行,生产环境记得换成CA签发的证书。

内容的提问来源于stack exchange,提问作者a verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:11:09