mirror of
https://github.com/fafhrd91/actix-web
synced 2024-11-27 17:52:56 +01:00
Fix Rustls 0.22 & 0.23 are limited to 256 handshakes per second. (#3408)
This commit is contained in:
parent
66905efd7b
commit
643d64581a
@ -70,22 +70,22 @@ ws = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
# TLS via OpenSSL
|
# TLS via OpenSSL
|
||||||
openssl = ["actix-tls/accept", "actix-tls/openssl"]
|
openssl = ["__tls", "actix-tls/accept", "actix-tls/openssl"]
|
||||||
|
|
||||||
# TLS via Rustls v0.20
|
# TLS via Rustls v0.20
|
||||||
rustls = ["rustls-0_20"]
|
rustls = ["__tls", "rustls-0_20"]
|
||||||
|
|
||||||
# TLS via Rustls v0.20
|
# TLS via Rustls v0.20
|
||||||
rustls-0_20 = ["actix-tls/accept", "actix-tls/rustls-0_20"]
|
rustls-0_20 = ["__tls", "actix-tls/accept", "actix-tls/rustls-0_20"]
|
||||||
|
|
||||||
# TLS via Rustls v0.21
|
# TLS via Rustls v0.21
|
||||||
rustls-0_21 = ["actix-tls/accept", "actix-tls/rustls-0_21"]
|
rustls-0_21 = ["__tls", "actix-tls/accept", "actix-tls/rustls-0_21"]
|
||||||
|
|
||||||
# TLS via Rustls v0.22
|
# TLS via Rustls v0.22
|
||||||
rustls-0_22 = ["actix-tls/accept", "actix-tls/rustls-0_22"]
|
rustls-0_22 = ["__tls", "actix-tls/accept", "actix-tls/rustls-0_22"]
|
||||||
|
|
||||||
# TLS via Rustls v0.23
|
# TLS via Rustls v0.23
|
||||||
rustls-0_23 = ["actix-tls/accept", "actix-tls/rustls-0_23"]
|
rustls-0_23 = ["__tls", "actix-tls/accept", "actix-tls/rustls-0_23"]
|
||||||
|
|
||||||
# Compression codecs
|
# Compression codecs
|
||||||
compress-brotli = ["__compress", "brotli"]
|
compress-brotli = ["__compress", "brotli"]
|
||||||
@ -96,6 +96,10 @@ compress-zstd = ["__compress", "zstd"]
|
|||||||
# Don't rely on these whatsoever. They are semver-exempt and may disappear at anytime.
|
# Don't rely on these whatsoever. They are semver-exempt and may disappear at anytime.
|
||||||
__compress = []
|
__compress = []
|
||||||
|
|
||||||
|
# Internal (PRIVATE!) features used to aid checking feature status.
|
||||||
|
# Don't rely on these whatsoever. They may disappear at anytime.
|
||||||
|
__tls = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-service = "2"
|
actix-service = "2"
|
||||||
actix-codec = "0.5"
|
actix-codec = "0.5"
|
||||||
|
@ -61,13 +61,7 @@ pub mod ws;
|
|||||||
|
|
||||||
#[allow(deprecated)]
|
#[allow(deprecated)]
|
||||||
pub use self::payload::PayloadStream;
|
pub use self::payload::PayloadStream;
|
||||||
#[cfg(any(
|
#[cfg(feature = "__tls")]
|
||||||
feature = "openssl",
|
|
||||||
feature = "rustls-0_20",
|
|
||||||
feature = "rustls-0_21",
|
|
||||||
feature = "rustls-0_22",
|
|
||||||
feature = "rustls-0_23",
|
|
||||||
))]
|
|
||||||
pub use self::service::TlsAcceptorConfig;
|
pub use self::service::TlsAcceptorConfig;
|
||||||
pub use self::{
|
pub use self::{
|
||||||
builder::HttpServiceBuilder,
|
builder::HttpServiceBuilder,
|
||||||
|
@ -241,25 +241,13 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Configuration options used when accepting TLS connection.
|
/// Configuration options used when accepting TLS connection.
|
||||||
#[cfg(any(
|
#[cfg(feature = "__tls")]
|
||||||
feature = "openssl",
|
|
||||||
feature = "rustls-0_20",
|
|
||||||
feature = "rustls-0_21",
|
|
||||||
feature = "rustls-0_22",
|
|
||||||
feature = "rustls-0_23",
|
|
||||||
))]
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct TlsAcceptorConfig {
|
pub struct TlsAcceptorConfig {
|
||||||
pub(crate) handshake_timeout: Option<std::time::Duration>,
|
pub(crate) handshake_timeout: Option<std::time::Duration>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(
|
#[cfg(feature = "__tls")]
|
||||||
feature = "openssl",
|
|
||||||
feature = "rustls-0_20",
|
|
||||||
feature = "rustls-0_21",
|
|
||||||
feature = "rustls-0_22",
|
|
||||||
feature = "rustls-0_23",
|
|
||||||
))]
|
|
||||||
impl TlsAcceptorConfig {
|
impl TlsAcceptorConfig {
|
||||||
/// Set TLS handshake timeout duration.
|
/// Set TLS handshake timeout duration.
|
||||||
pub fn handshake_timeout(self, dur: std::time::Duration) -> Self {
|
pub fn handshake_timeout(self, dur: std::time::Duration) -> Self {
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
- `ConnectionInfo::realip_remote_addr()` now handles IPv6 addresses from `Forwarded` header correctly. Previously, it sometimes returned the forwarded port as well.
|
- `ConnectionInfo::realip_remote_addr()` now handles IPv6 addresses from `Forwarded` header correctly. Previously, it sometimes returned the forwarded port as well.
|
||||||
- The `UrlencodedError::ContentType` variant (relevant to the `Form` extractor) now uses the 415 (Media Type Unsupported) status code in it's `ResponseError` implementation.
|
- The `UrlencodedError::ContentType` variant (relevant to the `Form` extractor) now uses the 415 (Media Type Unsupported) status code in it's `ResponseError` implementation.
|
||||||
|
- `HttpServer::method.max_connection_rate` now takes effect on any TLS implementation. Previously, the configuration was missing for rustls versions 0.22 and 0.23.
|
||||||
|
|
||||||
## 4.7.0
|
## 4.7.0
|
||||||
|
|
||||||
|
@ -93,18 +93,18 @@ secure-cookies = ["cookies", "cookie/secure"]
|
|||||||
http2 = ["actix-http/http2"]
|
http2 = ["actix-http/http2"]
|
||||||
|
|
||||||
# TLS via OpenSSL
|
# TLS via OpenSSL
|
||||||
openssl = ["http2", "actix-http/openssl", "actix-tls/accept", "actix-tls/openssl"]
|
openssl = ["__tls", "http2", "actix-http/openssl", "actix-tls/accept", "actix-tls/openssl"]
|
||||||
|
|
||||||
# TLS via Rustls v0.20
|
# TLS via Rustls v0.20
|
||||||
rustls = ["rustls-0_20"]
|
rustls = ["rustls-0_20"]
|
||||||
# TLS via Rustls v0.20
|
# TLS via Rustls v0.20
|
||||||
rustls-0_20 = ["http2", "actix-http/rustls-0_20", "actix-tls/accept", "actix-tls/rustls-0_20"]
|
rustls-0_20 = ["__tls", "http2", "actix-http/rustls-0_20", "actix-tls/accept", "actix-tls/rustls-0_20"]
|
||||||
# TLS via Rustls v0.21
|
# TLS via Rustls v0.21
|
||||||
rustls-0_21 = ["http2", "actix-http/rustls-0_21", "actix-tls/accept", "actix-tls/rustls-0_21"]
|
rustls-0_21 = ["__tls", "http2", "actix-http/rustls-0_21", "actix-tls/accept", "actix-tls/rustls-0_21"]
|
||||||
# TLS via Rustls v0.22
|
# TLS via Rustls v0.22
|
||||||
rustls-0_22 = ["http2", "actix-http/rustls-0_22", "actix-tls/accept", "actix-tls/rustls-0_22"]
|
rustls-0_22 = ["__tls", "http2", "actix-http/rustls-0_22", "actix-tls/accept", "actix-tls/rustls-0_22"]
|
||||||
# TLS via Rustls v0.23
|
# TLS via Rustls v0.23
|
||||||
rustls-0_23 = ["http2", "actix-http/rustls-0_23", "actix-tls/accept", "actix-tls/rustls-0_23"]
|
rustls-0_23 = ["__tls", "http2", "actix-http/rustls-0_23", "actix-tls/accept", "actix-tls/rustls-0_23"]
|
||||||
|
|
||||||
# Full unicode support
|
# Full unicode support
|
||||||
unicode = ["dep:regex", "actix-router/unicode"]
|
unicode = ["dep:regex", "actix-router/unicode"]
|
||||||
@ -113,6 +113,10 @@ unicode = ["dep:regex", "actix-router/unicode"]
|
|||||||
# Don't rely on these whatsoever. They may disappear at anytime.
|
# Don't rely on these whatsoever. They may disappear at anytime.
|
||||||
__compress = []
|
__compress = []
|
||||||
|
|
||||||
|
# Internal (PRIVATE!) features used to aid checking feature status.
|
||||||
|
# Don't rely on these whatsoever. They may disappear at anytime.
|
||||||
|
__tls = []
|
||||||
|
|
||||||
# io-uring feature only available for Linux OSes.
|
# io-uring feature only available for Linux OSes.
|
||||||
experimental-io-uring = ["actix-server/io-uring"]
|
experimental-io-uring = ["actix-server/io-uring"]
|
||||||
|
|
||||||
|
@ -7,13 +7,7 @@ use std::{
|
|||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(any(
|
#[cfg(feature = "__tls")]
|
||||||
feature = "openssl",
|
|
||||||
feature = "rustls-0_20",
|
|
||||||
feature = "rustls-0_21",
|
|
||||||
feature = "rustls-0_22",
|
|
||||||
feature = "rustls-0_23",
|
|
||||||
))]
|
|
||||||
use actix_http::TlsAcceptorConfig;
|
use actix_http::TlsAcceptorConfig;
|
||||||
use actix_http::{body::MessageBody, Extensions, HttpService, KeepAlive, Request, Response};
|
use actix_http::{body::MessageBody, Extensions, HttpService, KeepAlive, Request, Response};
|
||||||
use actix_server::{Server, ServerBuilder};
|
use actix_server::{Server, ServerBuilder};
|
||||||
@ -190,7 +184,7 @@ where
|
|||||||
/// By default max connections is set to a 256.
|
/// By default max connections is set to a 256.
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
pub fn max_connection_rate(self, num: usize) -> Self {
|
pub fn max_connection_rate(self, num: usize) -> Self {
|
||||||
#[cfg(any(feature = "rustls-0_20", feature = "rustls-0_21", feature = "openssl"))]
|
#[cfg(feature = "__tls")]
|
||||||
actix_tls::accept::max_concurrent_tls_connect(num);
|
actix_tls::accept::max_concurrent_tls_connect(num);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
@ -243,13 +237,7 @@ where
|
|||||||
/// time, the connection is closed.
|
/// time, the connection is closed.
|
||||||
///
|
///
|
||||||
/// By default, the handshake timeout is 3 seconds.
|
/// By default, the handshake timeout is 3 seconds.
|
||||||
#[cfg(any(
|
#[cfg(feature = "__tls")]
|
||||||
feature = "openssl",
|
|
||||||
feature = "rustls-0_20",
|
|
||||||
feature = "rustls-0_21",
|
|
||||||
feature = "rustls-0_22",
|
|
||||||
feature = "rustls-0_23",
|
|
||||||
))]
|
|
||||||
pub fn tls_handshake_timeout(self, dur: Duration) -> Self {
|
pub fn tls_handshake_timeout(self, dur: Duration) -> Self {
|
||||||
self.config
|
self.config
|
||||||
.lock()
|
.lock()
|
||||||
|
Loading…
Reference in New Issue
Block a user