-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tls: Introduce OpenSSL #1
Conversation
01a3d05
to
bda87fc
Compare
0ad0b66
to
2f16ad8
Compare
@michael-redpanda - made a subtask for this https://redpandadata.atlassian.net/browse/CORE-7791 Seems that the ossl backend is not raising a |
Seems to be failing on https://github.com/redpanda-data/seastar/tree/v24.2.x as well |
This is from our fork v24.2.x branch:
|
oh, duh, that's just where we turned OpenSSL on I guess? prior to that would the openssl have been totally inert, or is there another way to run the tests w/ openssl backend or what? |
939311d
to
5638717
Compare
31f5632
to
637a9a3
Compare
Created tls-impl.cc and tls-impl.h which contains common structures and definitions that are not dependent on the underlying TLS mechanism. These changes set the stage for implementing other TLS providers. Signed-off-by: Michael Boquard <[email protected]>
This commit adds support for using OpenSSL, instead of GnuTLS, as the TLS provider within Seastar. To support this change, the configure script has been updated to allow users to select which cryptographic provider should be used by supply `--crypto-provider` and specificying either `OpenSSL` or `GnuTLS`. The OpenSSL implementation mirrors the GnuTLS implementation. Instead of using callbacks, a custom BIO was created to handle moving data on/off of the OpenSSL SSL session into the Seastar TLS session data sinks. When compiled for OpenSSL, the `certificate_credentials::set_priority_string` method is compiled out and replaced with the following: * `set_cipher_string` * `set_ciphersuites` * `enable_server_precedence` * `set_minimum_tls_version` * `set_maximum_tls_version` These methods are specific to OpenSSL. The github actions have been updated to run the full suite of tests against both cryptographic providers. `src/net/tcp.hh` and `src/websocket/server.cc` have been updated to use OpenSSL instead of GnuTLS, depending upon the build configuration. Signed-off-by: Michael Boquard <[email protected]>
A class that wraps around a typical logger that appends useful information about the connection when logging. Added use to the OpenSSL implementation. Signed-off-by: Michael Boquard <[email protected]>
More recent versions of OpenSSL requrire CA certificates to have CA:true Signed-off-by: Michael Boquard <[email protected]>
Now handling situations where the get() call doesn't throw but does return an empty buffer indicating EOF. Signed-off-by: Michael Boquard <[email protected]>
637a9a3
to
5c709c2
Compare
Started upstream PR: scylladb#2569 |
Introduces OpenSSL as an alternative TLS implementation to GnuTLS. This is a build-time configuration controlled by the CMake variable
Seastar_USE_OPENSSL
. Theconfigure.py
script has been updated to now have a--crypto-provider
option. Valid arguments to that areOpenSSL
andGnuTLS
.This implementation was released in Redpanda v24.2 on July 31st, and has been running on production clusters since.
Redpanda implemented these changes in order to provide a FIPS-compliant build to customers that require it (such as those wishing to undergo FedRAMP evaluation). OpenSSL was selected as it allows implementors to maintain the validation of the cryptographic module even when it's built from source.
modules
No changes have been introduced to enable the FIPS provider for Seastar. It is up to the implementor to enable and use the FIPS cryptographic module if desired.
Notes for Redpanda developers:
This implementation is nearly identical to the one we are currently running with the following exceptions:
tls_session_logger
is present only in this PR