使用 Indy WEB Server 支持 https

之前我在本站有博客文章,详细说明了,如何使用 OpenSSL 程序自己签发证书,用于基于 Indy 的 WebBroker 或者 WebService 程序,然后使用浏览器或者 Delphi 开发的 WebService 客户端去访问,是没问题的。

但是,浏览器还是会提示,这个证书不可信。即便把这个证书,加入到客户端的 WINDOWS 的证书管理里面,也不行。(备注:网上有文章说,把证书导入到 WINDOWS 里面,浏览器的地址栏就变绿了,不会显示不可信的红色,但是我这里没有成功)。

今天发现,我的 WIN10 电脑上运行 WebService 的客户端去访问自签名证书的服务器没问题,在 WIN7 电脑上反倒不行,跟踪了一下,服务器端(基于 Indy)提示一堆异常,基本上判断是客户端的问题。给客户端电脑(WIN7)导入自己签发的证书,问题没有解决。在客户端电脑使用浏览器去访问,自然也是提示不可信证书,强行让它访问,浏览器倒是可以出现页面。

为了解决这个问题,试了一下腾讯签发的免费证书。

操作:

1. 去腾讯申请免费证书。申请过程很简单,页面入口自己上网一搜就有了;你必须要有一个自己的域名。假设我这里输入的域名是 myDomainName.net.

2. 证书申请成功后,下载证书,是一个 ZIP 文件;

3. 这个 ZIP 包里面有 IIS, APACHE 等目录,里面的文件估计是给对应的 WEB SERVER 使用的,不用管它。我这里是使用 INDY 这个 WEB SERVER;

4. 这个 ZIP 包里面,有 3 个文件:

4.1. myDomainName.net.csr;

4.2. myDomainName.net.key

4.3. myDomainName.net.pem

5. 对于 Indy 来说,它需要3个文件:证书,根证书,以及 key;这里,证书和根证书,都使用 myDomainName.net.pem,不能使用 myDomain.Name.net.csr。

代码如下:

IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile := TPath.Combine(Self.GetMyPath, 'MyDomainName.net.pem');
IdServerIOHandlerSSLOpenSSL1.SSLOptions.KeyFile := TPath.Combine(Self.GetMyPath, 'MyDomainName.net.key'); 
IdServerIOHandlerSSLOpenSSL1.SSLOptions.RootCertFile := TPath.Combine(Self.GetMyPath, 'MyDomainName.net.pem'); 

6. 这里的 IdServerIOHandlerSSLOpenSSL1 是拖到界面上的控件。这个控件是 Indy 带来用于支持 SSL 的控件。设置它的一些参数,比如上述代码,指定它需要的证书文件等等,然后把它和 Indy 的 WebServer 绑定。绑定的代码:

FServer: TIdHTTPWebBrokerBridge;

FServer.IOHandler := IdServerIOHandlerSSLOpenSSL1;

7. 这个 IdServerIOHandlerSSLOpenSSL1 在设计期,打开属性面板,设置其它属性:

7.1. IdServerIOHandlerSSLOpenSSL1.SSLVersions 里面的各个版本全打勾,只有 sslvSSLv23无法打勾(设计期,无法勾上);

7.2. IdServerIOHandlerSSLOpenSSL1.SSLOptions.VerifyMode := [];

7.3. IdServerIOHandlerSSLOpenSSL1.SSLOptions.VerifyDepth  := 0;

8. 做完上述设置,这个服务器编译运行,就支持 https 访问了。

9. 测试:服务器运行,打开浏览器,地址栏输入 https://127.0.0.1:8080 结果浏览器提示不安全,提示信息是这个证书的域名和当前浏览器访问的域名不同。把 Windows 的 host 文件拿出来,增加一条域名解析:127.0.0.1  myDomainName.net ,然后在浏览器里面使用 https://myDomainName.net:8080 访问,成功,浏览器不再提示不安全,浏览器地址栏也不显示红色了。

10. 做了上述 host 域名解析设置后,使用 Delphi 开发的 WebService 客户端去访问 myDomainName.net 结果阻塞,可能是域名解析不成功导致。直接使用 127.0.0.1 去访问,成功。之前使用自己签发的证书,则使用 127.0.0.1 去访问是不成功的(再次说明:在 WIN10 上是成功的,在 WIN7 上不成功)。

结论:

基于 Indy 开发的 WebServer (比如 WebBroker 程序) 或者 WebService 服务器端程序,加载从腾讯申请的证书,可以让浏览器做 https 访问的时候,成功验证通过。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值