【问题标题】:PHP/Swoole Http Server - how can I dynamically load ssl?PHP/Swoole Http Server - 如何动态加载 ssl?
【发布时间】:2019-01-26 20:42:08
【问题描述】:

我需要根据处理请求即时加载不同的 ssl 证书。我尝试在下面的代码中执行此操作,但服务器仍在处理请求时加载 cert1 证书,而不是像我在代码中尝试执行的那样加载 cert2。

如何动态地重新加载不同的证书?有可能吗?

代码示例:

<?php

require 'vendor/autoload.php';


$server = new swoole_http_server("192.168.10.10", 443, SWOOLE_BASE, SWOOLE_SOCK_TCP | SWOOLE_SSL);

// setup the location of ssl cert files and key files
$ssl_dir = __DIR__.'/ssl_certs';
$server->set([
    'max_conn'           => 500,
    'daemonize'          => false,
    'dispatch_mode'      => 2,
    'buffer_output_size' => 2 * 1024 * 1024,
    'ssl_cert_file' => $ssl_dir . '/cert1.local.crt',
    'ssl_key_file' => $ssl_dir . '/cert1.local.key',
    'open_http2_protocol' => true, // Enable HTTP2 protocol
]);

$server->on('request', function ($request, $response) use ($server) {
    $server->set([
        'ssl_cert_file' => $ssl_dir . '/cert2.local.crt',
        'ssl_key_file' => $ssl_dir . '/cert2.local.key',
    ]);
    $response->end("<h1>Hello World. #".rand(1000, 9999)."</h1>");
});

$server->start();

【问题讨论】:

    标签: php ssl swoole


    【解决方案1】:

    很遗憾,您无法即时更改 $server 配置。

    一种选择是在具有不同设置的多个端口上运行 Swoole 服务器:

    $port1 = $server->listen("127.0.0.1", 9501, SWOOLE_SOCK_TCP | SWOOLE_SSL);
    $port2 = $server->listen("127.0.0.1", 9502, SWOOLE_SOCK_TCP | SWOOLE_SSL);
    
    $port1->set([
        'open_eof_split' => true,
        'package_eof' => "\r\n",
        'ssl_cert_file' => 'ssl1.cert',
        'ssl_key_file' => 'ssl1.key',
    ]);
    
    $port2->set([
        'open_eof_split' => true,
        'package_eof' => "\r\n",
        'ssl_cert_file' => 'ssl2.cert',
        'ssl_key_file' => 'ssl2.key',
    ]);
    

    之后,您可以在 Nginx 中为不同的 URI 创建不同的规则来处理流量并将其重定向到正确的 Swoole 端口。

    【讨论】:

      【解决方案2】:

      您是否只需要多个证书来为不同的域名提供 SSL?

      如果是这种情况,您可以在一个证书中托管多个域。这将消除转换证书的要求。

      【讨论】:

        猜你喜欢
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        • 2016-08-02
        • 2011-04-20
        • 2015-01-12
        • 2012-11-08
        相关资源
        最近更新 更多