使用SSL TLS加密链接

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

ssl://将根据远程服务器的兼容性和参数设置尝试与之建立 SSL V2 或 SSL V3 链接。

sslv2://和 sslv3://将明确的选择 SSL V2 或 SSL V3 协议进行连接。

一旦涉及SSL/TLS就涉及证书的概念,在SSL/TLS握手阶段,服务器会将自己的证书发送给客户端,客户端可以对证书进行验证,再进入加密通信过程。SSL/TLS握手阶段,是一个非加密通信过程, 后续才会是加密通信过程。

要配置SSL/TLS第一步是生成证书,证书可以通过第三方权威机构购买,或者自行签发。
注:对我们自行签发的证书,浏览器不信任, 地址栏的加密标志会显示警告信息,可以为客户端手工安装自签名的证书,使它被客户端浏览器信任。

1. 生成自签名的证书

命令行下运行php脚本,用来生成证书:

php vendor/beyoio/beyod/scripts/ssl.php

将在当前目录生成server.pem, 这就是证书文件, 请复制到config目录下。

不建议在windows中执行,否则可能遇到未知的错误。

2. 配置SSL侦听器

config/main.php

'components' => [
    'server'=> [
        'class' => 'app\MyServer',
        'listeners' => [
            'server1' => [
                'class' => 'beyod\Listener',
                'listen' => 'ssl://0.0.0.0:9723',
                'handler' => [
                    'class' => 'beyod\protocol\http/Handler',
                    'document_root' => __DIR__.'/../app/webroot',
                ],
                'parser'  => 'beyod\protocol\http\Parser',
                'ssl' => [
                    'local_cert' => __DIR__.'/server.pem', //证书文件路径
                    'passphrase' => 'beyodpass',//证书密码
                    'allow_self_signed'=>true, //允许自签名证书
                    'verify_peer' =>false //不验证客户端的证书
                ]
            ]
        ]
    ]
]

3.启动服务,在浏览器中输入:https://localhost:9723/, 进行测试

4. Websocket SSL

即wss协议,加密的websocket协议。利用相同的方法,我们就可以实现wss协议支持。