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
cd d:\openssl
设置配置文件
set OPENSSL_CONF=openssl.cfg
set OPENSSL_CONF=openssl.cfg
运行openssl
openssl
openssl
生成服务器的私钥server.key
genrsa -des3 -out server.key 2048
用server.key生成一个证书server.csr
生成的csr 文件交给CA机构签名后,形成服务器自己的证书。按照提示,提供服务器证书的相关信息。
req -new -key server.key -out server.csr
生成的csr 文件交给CA机构签名后,形成服务器自己的证书。按照提示,提供服务器证书的相关信息。
req -new -key server.key -out server.csr
生成客户端的私钥client.key
genrsa -des3 -out client.key 2048
genrsa -des3 -out client.key 2048
用client.key 生成一个证书
req -new -key client.key -out client.csr
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 server.csr -signkey server.key -out server.crt
生成客户端证书
x509 -req -days 36500 -in client.csr -signkey client.key -out client.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
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个端口
1 2 | IdHTTPServer1.Bindings.Add.Port := port; //http port IdHTTPServer1.Bindings.Add.Port := 6688; //https port |
5)设置证书
1 2 3 | 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文件时输入的
1 2 3 4 5 6 | procedure TidHttpSvr.IdServerIOHandlerSSLOpenSSL1GetPassword( var Password: string ); begin Password := '123456' ; end; |
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/11264513.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?