Надеюсь, кто-то может предоставить мне простой 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, я никогда не попаду в мой код.
30 января ПРИМЕЧАНИЕ - Я использовал sslbuddy для генерации ключей. И это все еще не сработало. Затем я закомментировал следующие строки, и это сработало:
ServerIOHandler.SSLOptions.VerifyDepth := 1;
ServerIOHandler.SSLOptions.VerifyMode := [sslvrfPeer,sslvrfFailIfNoPeerCert,sslvrfClientOnce];