• IdHTTPServer开发https服务器


    IdHTTPServer开发https服务器

    该篇经验同样适用于DATASNAP和UNIGUI,因为它们都基于INDY10。

    1)需要TIdServerIOHandlerSSLOpenSSL控件

    2)设置属性

    3)OPENSSL生成自签名证书

    X.509证书包含三个文件:key,csr,crt。

    • key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
    • csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
    • crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
    进OPENSSL目录
    cd d:openssl
     
    设置配置文件
    set OPENSSL_CONF=openssl.cfg
     
    运行openssl
    openssl
     
    生成服务器的私钥server.key
    genrsa -des3 -out server.key 2048
     
    用server.key生成一个证书server.csr
    生成的csr 文件交给CA机构签名后,形成服务器自己的证书。按照提示,提供服务器证书的相关信息。
    req -new -key server.key -out server.csr
     
    生成客户端的私钥client.key
    genrsa -des3 -out client.key 2048
     
    用client.key 生成一个证书
    req -new -key client.key -out client.csr
     
    生成服务器证书
    x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt
     
    生成客户端证书
    x509 -req -days 36500 -in client.csr -signkey client.key -out client.crt
     
    证书格式转换
    #IE浏览器需要p12证书,所以需要签发p12证书,用于IE签发:
    openssl pkcs12 -export -clcerts -in client.crt -inkeyclient.key -out client.p12
     
    #IOS 证书签发格式
    openssl x509 -in client.crt -out client.cer
     
    #Android 证书签发格式
    openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx
     
    #pem格式证书
    openssl pkcs12 -export -in ddmdd_a.pfx -out client.pem
     
     

    4)绑定2个端口

      IdHTTPServer1.Bindings.Add.Port := port;    //http port
      IdHTTPServer1.Bindings.Add.Port := 6688;    //https port
    

     5)设置证书

    IdServerIOHandlerSSLOpenSSL1.SSLOptions.KeyFile:= ExtractFilePath(ParamStr(0)) + 'yn.key';
      IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile:= ExtractFilePath(ParamStr(0)) + 'yn.crt';
      IdServerIOHandlerSSLOpenSSL1.SSLOptions.RootCertFile:= ExtractFilePath(ParamStr(0)) + 'yn.crt';
    

      6)准备ssleay32.dll和libeay32.dll文件

    这2个文件,可以到DELPHI安装目录里面进行全文搜索,有。

    中间件和客户端都需要这2个动态库文件。

    因此INDY的SSL只支持MSWINDOWS平台,不支持LINUX、IOS、ANDROID平台。

     7)增加事件处理,密码是生成yn.key文件时输入的

    procedure TidHttpSvr.IdServerIOHandlerSSLOpenSSL1GetPassword(var Password: string);
    begin
      
      Password := '123456';
      
    end;
    

      

  • 相关阅读:
    【Mybatis源码解析】- JDBC连接数据库的原理和操作
    【JDK源码解析】- ArrayList源码解析,绝对详细
    【设计模式】-代理模式及动态代理详解
    【Java基础】反射机制及应用
    Go 中的 channel 与 Java BlockingQueue 的本质区别
    Github Actions 还能做这些事
    写了一个 gorm 乐观锁插件
    Go 去找个对象吧
    Web 自动化测试全面提升之 Pytest
    【51testing专访】web自动化,从入门到进阶
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/11264513.html
Copyright © 2020-2023  润新知