123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- From 02dd0bc7bae8a2011729f95021690e694fd8e43e Mon Sep 17 00:00:00 2001
- From: V <[email protected]>
- Date: Fri, 25 Apr 2025 18:27:13 +0200
- Subject: [PATCH] fix: use tls1.2 only website for tls12 test suites (#129)
- * fix: use tls1.2 only website for tls12 test suites
- ---
- src/helper_v2.rs | 2 ++
- src/main.rs | 12 +++++++-----
- src/sip003.rs | 6 +++---
- src/util.rs | 2 +-
- tests/tls12.rs | 32 ++++++++++++++++----------------
- 5 files changed, 29 insertions(+), 25 deletions(-)
- --- a/src/helper_v2.rs
- +++ b/src/helper_v2.rs
- @@ -26,6 +26,7 @@ use crate::util::prelude::*;
-
- pub(crate) const HMAC_SIZE_V2: usize = 8;
-
- +#[allow(unused)]
- pub(crate) trait HashedStream {
- fn hash_stream(&self) -> [u8; 20];
- }
- @@ -98,6 +99,7 @@ impl<S> HashedWriteStream<S> {
- })
- }
-
- + #[allow(unused)]
- pub(crate) fn hash(&self) -> [u8; 20] {
- self.hmac
- .borrow()
- --- a/src/main.rs
- +++ b/src/main.rs
- @@ -252,7 +252,7 @@ pub(crate) fn get_sip003_arg() -> Option
- let opts: HashMap<_, _> = opts.into_iter().collect();
-
- let threads = opts.get("threads").map(|s| s.parse::<u8>().unwrap());
- - let v3 = opts.get("v3").is_some();
- + let v3 = opts.contains_key("v3");
- let passwd = opts
- .get("passwd")
- .expect("need passwd param(like passwd=123456)");
- @@ -262,15 +262,17 @@ pub(crate) fn get_sip003_arg() -> Option
- v3,
- ..Default::default()
- };
- - let args = if opts.get("server").is_some() {
- + let args = if opts.contains_key("server") {
- let tls_addr = opts
- .get("tls")
- .expect("tls param must be specified(like tls=xxx.com:443)");
- let tls_addrs = parse_server_addrs(tls_addr)
- .expect("tls param parse failed(like tls=xxx.com:443 or tls=yyy.com:1.2.3.4:443;zzz.com:443;xxx.com)");
- - let wildcard_sni =
- - WildcardSNI::from_str(opts.get("wildcard-sni").map(AsRef::as_ref).unwrap_or("off"), true)
- - .expect("wildcard_sni format error");
- + let wildcard_sni = WildcardSNI::from_str(
- + opts.get("wildcard-sni").map(AsRef::as_ref).unwrap_or("off"),
- + true,
- + )
- + .expect("wildcard_sni format error");
- Args {
- cmd: crate::Commands::Server {
- listen: format!("{ss_remote_host}:{ss_remote_port}"),
- --- a/src/sip003.rs
- +++ b/src/sip003.rs
- @@ -6,7 +6,7 @@ pub fn parse_sip003_options(s: &str) ->
- let mut i = 0;
- while i < s.len() {
- // read key
- - let (offset, key) = index_unescaped(&s[i..], &[b'=', b';']).context("read key")?;
- + let (offset, key) = index_unescaped(&s[i..], b"=;").context("read key")?;
- if key.is_empty() {
- bail!("empty key in {}", &s[i..]);
- }
- @@ -21,7 +21,7 @@ pub fn parse_sip003_options(s: &str) ->
- // skip equals
- i += 1;
- // read value
- - let (offset, value) = index_unescaped(&s[i..], &[b'=', b';']).context("read value")?;
- + let (offset, value) = index_unescaped(&s[i..], b"=;").context("read value")?;
- i += offset;
- opts.push((key, value));
- // Skip the semicolon.
- @@ -36,7 +36,7 @@ fn index_unescaped(s: &str, term: &[u8])
-
- while i < s.len() {
- let mut b: u8 = s.as_bytes()[i];
- - if term.iter().any(|&e| b == e) {
- + if term.contains(&b) {
- break;
- }
- if b == b'\\' {
- --- a/src/util.rs
- +++ b/src/util.rs
- @@ -599,7 +599,7 @@ pub(crate) async fn resolve(addr: &str)
- addr_iter.next().ok_or_else(|| {
- std::io::Error::new(
- std::io::ErrorKind::InvalidInput,
- - format!("unable to resolve addr: {}", addr),
- + format!("unable to resolve addr: {addr}"),
- )
- })
- }
- --- a/tests/tls12.rs
- +++ b/tests/tls12.rs
- @@ -4,7 +4,7 @@ use shadow_tls::{RunningArgs, TlsAddrs,
- mod utils;
- use utils::*;
-
- -// handshake: bing.com(tls1.2 only)
- +// handshake: badssl.com(tls1.2 only)
- // data: captive.apple.com:80
- // protocol: v2
- #[test]
- @@ -12,7 +12,7 @@ fn tls12_v2() {
- let client = RunningArgs::Client {
- listen_addr: "127.0.0.1:30000".to_string(),
- target_addr: "127.0.0.1:30001".to_string(),
- - tls_names: TlsNames::try_from("bing.com").unwrap(),
- + tls_names: TlsNames::try_from("badssl.com").unwrap(),
- tls_ext: TlsExtConfig::new(None),
- password: "test".to_string(),
- nodelay: true,
- @@ -22,7 +22,7 @@ fn tls12_v2() {
- let server = RunningArgs::Server {
- listen_addr: "127.0.0.1:30001".to_string(),
- target_addr: "captive.apple.com:80".to_string(),
- - tls_addr: TlsAddrs::try_from("bing.com").unwrap(),
- + tls_addr: TlsAddrs::try_from("badssl.com").unwrap(),
- password: "test".to_string(),
- nodelay: true,
- fastopen: true,
- @@ -31,7 +31,7 @@ fn tls12_v2() {
- test_ok(client, server, CAPTIVE_HTTP_REQUEST, CAPTIVE_HTTP_RESP);
- }
-
- -// handshake: bing.com(tls1.2 only)
- +// handshake: badssl.com(tls1.2 only)
- // data: captive.apple.com:80
- // protocol: v3 lossy
- #[test]
- @@ -39,7 +39,7 @@ fn tls12_v3_lossy() {
- let client = RunningArgs::Client {
- listen_addr: "127.0.0.1:30002".to_string(),
- target_addr: "127.0.0.1:30003".to_string(),
- - tls_names: TlsNames::try_from("bing.com").unwrap(),
- + tls_names: TlsNames::try_from("badssl.com").unwrap(),
- tls_ext: TlsExtConfig::new(None),
- password: "test".to_string(),
- nodelay: true,
- @@ -49,7 +49,7 @@ fn tls12_v3_lossy() {
- let server = RunningArgs::Server {
- listen_addr: "127.0.0.1:30003".to_string(),
- target_addr: "captive.apple.com:80".to_string(),
- - tls_addr: TlsAddrs::try_from("bing.com").unwrap(),
- + tls_addr: TlsAddrs::try_from("badssl.com").unwrap(),
- password: "test".to_string(),
- nodelay: true,
- fastopen: true,
- @@ -58,7 +58,7 @@ fn tls12_v3_lossy() {
- utils::test_ok(client, server, CAPTIVE_HTTP_REQUEST, CAPTIVE_HTTP_RESP);
- }
-
- -// handshake: bing.com(tls1.2 only)
- +// handshake: badssl.com(tls1.2 only)
- // data: captive.apple.com:80
- // protocol: v3 strict
- // v3 strict cannot work with tls1.2, so it must fail
- @@ -68,7 +68,7 @@ fn tls12_v3_strict() {
- let client = RunningArgs::Client {
- listen_addr: "127.0.0.1:30004".to_string(),
- target_addr: "127.0.0.1:30005".to_string(),
- - tls_names: TlsNames::try_from("bing.com").unwrap(),
- + tls_names: TlsNames::try_from("badssl.com").unwrap(),
- tls_ext: TlsExtConfig::new(None),
- password: "test".to_string(),
- nodelay: true,
- @@ -78,7 +78,7 @@ fn tls12_v3_strict() {
- let server = RunningArgs::Server {
- listen_addr: "127.0.0.1:30005".to_string(),
- target_addr: "captive.apple.com:80".to_string(),
- - tls_addr: TlsAddrs::try_from("bing.com").unwrap(),
- + tls_addr: TlsAddrs::try_from("badssl.com").unwrap(),
- password: "test".to_string(),
- nodelay: true,
- fastopen: true,
- @@ -87,8 +87,8 @@ fn tls12_v3_strict() {
- utils::test_ok(client, server, CAPTIVE_HTTP_REQUEST, CAPTIVE_HTTP_RESP);
- }
-
- -// handshake: bing.com(tls1.2 only)
- -// data: bing.com:443
- +// handshake: badssl.com(tls1.2 only)
- +// data: badssl.com:443
- // protocol: v2
- // Note: v2 can not defend against hijack attack.
- // Here hijack means directly connect to the handshake server.
- @@ -98,8 +98,8 @@ fn tls12_v3_strict() {
- fn tls12_v2_hijack() {
- let client = RunningArgs::Client {
- listen_addr: "127.0.0.1:30006".to_string(),
- - target_addr: "bing.com:443".to_string(),
- - tls_names: TlsNames::try_from("bing.com").unwrap(),
- + target_addr: "badssl.com:443".to_string(),
- + tls_names: TlsNames::try_from("badssl.com").unwrap(),
- tls_ext: TlsExtConfig::new(None),
- password: "test".to_string(),
- nodelay: true,
- @@ -109,7 +109,7 @@ fn tls12_v2_hijack() {
- test_hijack(client);
- }
-
- -// handshake: bing.com(tls1.2 only)
- +// handshake: badssl.com(tls1.2 only)
- // data: captive.apple.com:80
- // protocol: v3 lossy
- // (v3 strict can not work with tls1.2)
- @@ -121,8 +121,8 @@ fn tls12_v2_hijack() {
- fn tls12_v3_lossy_hijack() {
- let client = RunningArgs::Client {
- listen_addr: "127.0.0.1:30007".to_string(),
- - target_addr: "bing.com:443".to_string(),
- - tls_names: TlsNames::try_from("bing.com").unwrap(),
- + target_addr: "badssl.com:443".to_string(),
- + tls_names: TlsNames::try_from("badssl.com").unwrap(),
- tls_ext: TlsExtConfig::new(None),
- password: "test".to_string(),
- nodelay: true,
|