# 使用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协议支持。