Перезагрузите SSL-контекст Netty Server для gRPC

Может ли кто-нибудь сказать мне, как перезагрузить SSLContext при обновлении / обновлении сертификата сервера без перезапуска сервера gRPC?

У меня есть этот код для создания и запуска сервера gRPC. Метод certificateRefreshed () вызывается всякий раз, когда сертификат изменяется, когда я создаю новый контекст SSL, но это не сработает, если я не перезапущу сервер grpc.

public class ServerWithTls {
    Server server;
    SslContext sslContext;

    public ServerWithTls() {
        this.sslContext = getSslContext();

        NettyServerBuilder serverBuilder = NettyServerBuilder
            .forPort(settings.port())
            .executor(executorService)
            .addService(myService);
            .sslContext(this.sslContext);

        server = serverBuilder.build();
        server.start();
    }

    public io.netty.handler.ssl.SslContext getSslContext() {
        // returns ssl context based on cert and key
    }

    // gets notified when a server cert changes
    public void certificateRefreshed() {
        // create a new SSL context when cert changes
        this.sslContext = getSslContext();
    }

}

person rahul    schedule 18.07.2018    source источник
comment
Обновление сертификата без перезапуска сервера в настоящее время не поддерживается.   -  person Carl Mastrangelo    schedule 25.07.2018


Ответы (1)


Я не уверен, есть ли более простые альтернативы, но я вижу два потенциально возможных пути.

  1. Создайте свой собственный SslContext, имитируя DelegatingSslContext. Если вам нужен другой сертификат, вы должны переключиться на другой SslContext (особенно во время newEngine).

  2. Используйте KeyManagerFactory, ключевой материал которого может меняться со временем. Мне не известно о существовавшей ранее реализации такой фабрики, поэтому вам, вероятно, потребуется реализовать _ 5_, который делегирует KeyManagerFactory. Затем вы могли бы со временем поменять KeyManagerFactory.

Предупреждаю, что мне было легко пропустить что-то, что сделало бы подходы недействительными.

person Eric Anderson    schedule 28.08.2018