【发布时间】:2011-12-27 16:18:56
【问题描述】:
希望有人能给我一个简单的TIdHttpServer例子,它支持SSL。使用 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 生成密钥。这仍然没有奏效。然后我注释掉了以下几行,它起作用了:
ServerIOHandler.SSLOptions.VerifyDepth := 1;
ServerIOHandler.SSLOptions.VerifyMode := [sslvrfPeer,sslvrfFailIfNoPeerCert,sslvrfClientOnce];
【问题讨论】: