IdHTTPServer开发https服务器
<p>IdHTTPServer开发https服务器</p><p>该篇经验同样适用于DATASNAP和UNIGUI,因为它们都基于INDY10。</p>
<p>1)需要TIdServerIOHandlerSSLOpenSSL控件</p>
<p><img src="https://img2018.cnblogs.com/blog/368779/201907/368779-20190729160500004-1651167729.png"></p>
<p>2)设置属性</p>
<p><img src="https://img2018.cnblogs.com/blog/368779/201907/368779-20190729160637855-381268557.png"></p>
<p>3)OPENSSL生成自签名证书</p>
<p>X.509证书包含三个文件:key,csr,crt。</p>
<ul>
<li>key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密</li>
<li>csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名</li>
<li>crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息</li>
</ul>
<div>进OPENSSL目录<br>cd d:\openssl</div>
<div> </div>
<div>设置配置文件<br>set OPENSSL_CONF=openssl.cfg</div>
<div> </div>
<div>运行openssl<br>openssl</div>
<div> </div>
<div>生成服务器的私钥server.key</div>
<div>genrsa -des3 -out server.key 2048</div>
<div> </div>
<div>用server.key生成一个证书server.csr<br>生成的csr 文件交给CA机构签名后,形成服务器自己的证书。按照提示,提供服务器证书的相关信息。<br>req -new -key server.key -out server.csr</div>
<div> </div>
<div>生成客户端的私钥client.key<br>genrsa -des3 -out client.key 2048</div>
<div> </div>
<div>用client.key 生成一个证书<br>req -new -key client.key -out client.csr</div>
<div> </div>
<div>生成服务器证书<br>x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt</div>
<div> </div>
<div>生成客户端证书<br>x509 -req -days 36500 -in client.csr -signkey client.key -out client.crt</div>
<div> </div>
<div>
<div><strong>证书格式转换</strong></div>
<div>#IE浏览器需要p12证书,所以需要签发p12证书,用于IE签发:<br>openssl pkcs12 -export -clcerts -in client.crt -inkeyclient.key -out client.p12<br> <br>#IOS 证书签发格式<br>openssl x509 -in client.crt -out client.cer<br> <br>#Android 证书签发格式<br>openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx<br> <br>#pem格式证书<br>openssl pkcs12 -export -in ddmdd_a.pfx -out client.pem</div>
<div> </div>
<div> </div>
</div>
<p>4)绑定2个端口</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">IdHTTPServer1.Bindings.Add.Port := port; //http port
IdHTTPServer1.Bindings.Add.Port := 6688; //https port
</pre>
</div>
<p> 5)设置证书</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">IdServerIOHandlerSSLOpenSSL1.SSLOptions.KeyFile:= ExtractFilePath(ParamStr(0)) + 'yn.key';
IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile:= ExtractFilePath(ParamStr(0)) + 'yn.crt';
IdServerIOHandlerSSLOpenSSL1.SSLOptions.RootCertFile:= ExtractFilePath(ParamStr(0)) + 'yn.crt';
</pre>
</div>
<p> 6)准备ssleay32.dll和libeay32.dll文件</p>
<p>这2个文件,可以到DELPHI安装目录里面进行全文搜索,有。</p>
<p>中间件和客户端都需要这2个动态库文件。</p>
<p>因此INDY的SSL只支持MSWINDOWS平台,不支持LINUX、IOS、ANDROID平台。</p>
<p> 7)增加事件处理,密码是生成yn.key文件时输入的</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">procedure TidHttpSvr.IdServerIOHandlerSSLOpenSSL1GetPassword(var Password: string);
begin
Password := '123456';
end;
</pre>
</div>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/11264513.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/11264513.html
頁:
[1]