gpt4 book ai didi

delphi - 支持 SSL 的简单 TIdHttpServer 示例

转载 作者:行者123 更新时间:2023-12-03 15:55:08 25 4
gpt4 key购买 nike

希望有人能给我提供一个支持 SSL 的简单 TIdHttpServer 示例。使用Delphi2007和Indy10。我有以下内容来创建/设置服务器和 ioHandler:

ServerIOHandler := TIdServerIOHandlerSSLOpenSSL.Create(self);
ServerIOHandler.SSLOptions.CertFile := 'mycert.pem';
ServerIOHandler.SSLOptions.KeyFile := 'mycert.pem';
ServerIOHandler.SSLOptions.RootCertFile := 'mycert.pem';
ServerIOHandler.SSLOptions.Method := sslvSSLv23;
ServerIOHandler.SSLOptions.Mode := sslmServer;

ServerIOHandler.SSLOptions.VerifyDepth := 1;
ServerIOHandler.SSLOptions.VerifyMode := [sslvrfPeer,sslvrfFailIfNoPeerCert,sslvrfClientOnce];

IdHTTPServer1 := TIdHTTPServer.Create;
IdHTTPServer1.AutoStartSession := True;
IdHTTPServer1.SessionState := True;
IdHTTPServer1.OnCommandGet := IdHTTPServer1CommandGet;
idHttpServer1.ParseParams := True;
idHttpServer1.DefaultPort := 80;
idHttpServer1.IOHandler := ServerIOHandler;
IdHTTPServer1.Active := True;

mycert.pem 是使用 openssl 使用以下命令创建的:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

我立即认为有问题,因为我对 CertFile、KeyFile、RootCertFile 使用相同的文件。

我在提示中输入了空白,但通用名称除外。我确定设置为我正在使用的域名(假设它是 myexample.com)。

在浏览器中,如果我点击 http://myexample.com 会导致异常:接受 SSL 连接时出错。点击 https://myexample.com 永远不会进入我的代码。

1 月 30 日注意 - 我使用 sslbuddy 生成 key 。但这仍然不起作用。然后我注释掉了以下几行并且它起作用了:

ServerIOHandler.SSLOptions.VerifyDepth := 1;
ServerIOHandler.SSLOptions.VerifyMode := [sslvrfPeer,sslvrfFailIfNoPeerCert,sslvrfClientOnce];

最佳答案

如果你想监听 443,你需要绑定(bind)它...(如果你想要正常的 HTTP 流量也绑定(bind)到 80)

 IdHTTPServer1.Bindings.Add.Port := 80;
IdHTTPServer1.Bindings.Add.Port := 443;

如果监听多个 HTTP 和 HTTPS 端口,则在处理连接时,您需要根据端口号允许正常或加密流量。您需要使用 OnQuerySSLPort 事件来禁用端口 80 上的 SSL。

关于证书...这取决于您使用的是自己的 CA 还是使用完善的公共(public) CA。请注意,您还应该设置 OnGetPassword 事件 (ServerIOHandler),以便告诉服务器您的 key 密码。

关于delphi - 支持 SSL 的简单 TIdHttpServer 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8646781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com