1

プロセス要求に応じて、さまざまな SSL 証明書をオンザフライでロードする必要があります。以下のコードのように実行しようとしましたが、サーバーは、コードで実行しようとしている cert2 ではなく、リクエストの処理時にまだ cert1 証明書をロードしています。

その場でさまざまな証明書を動的に再ロードするにはどうすればよいですか? 出来ますか?

コード例:

<?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();

4

2 に答える 2

2

残念ながら、その場で $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 ポートにリダイレクトできます。

于 2019-10-10T13:10:28.727 に答える