Connecting to Cast devices failed with: Connection error: invalid peer certificate: Other(OtherError(UnsupportedCertVersion)) Many Cast devices (notably AV receivers with Chromecast built-in) serve a self-signed X.509 version 1 certificate on port 8009. rust_cast 0.21's NoCertificateVerification verifier accepts any certificate in verify_server_cert, but its signature checks delegate to rustls helpers that parse the certificate with webpki, which only supports version 3 certificates. The handshake therefore aborts for v1 device certificates; this affects every rustls-based rust_cast release (0.19+) and only devices happening to serve v3 certificates can connect. Vendors rust_cast 0.21.0 under crates/vendor with a minimal patch: the verifier's verify_tls12_signature/verify_tls13_signature now assert validity, matching the verifier's no-validation contract and the rustls danger verifier examples. Wired up via [patch.crates-io]; see crates/vendor/rust_cast/QBZ_PATCH.md for the full analysis and how to drop the patch once upstream releases the fix. Verified against a real device serving a v1 certificate (TLS 1.2, ECDHE-RSA-CHACHA20-POLY1305): handshake, receiver channel and heartbeat now establish; unpatched fails at the first channel write. cargo check/test -p qbz-cast pass (13 tests). Refs: rustls/rustls#1298, rustls/webpki#29, #439
23 lines
724 B
Rust
23 lines
724 B
Rust
use protobuf_codegen::{Codegen, Customize};
|
|
use std::env;
|
|
|
|
fn main() {
|
|
let generate_proto = env::var("GENERATE_PROTO").unwrap_or_else(|_| "false".to_string());
|
|
if generate_proto == "true" {
|
|
Codegen::new()
|
|
.out_dir("src/cast")
|
|
.inputs([
|
|
"protobuf/authority_keys.proto",
|
|
"protobuf/cast_channel.proto",
|
|
])
|
|
.includes(["protobuf"])
|
|
.customize(Customize::default().gen_mod_rs(false))
|
|
.run()
|
|
.expect("protoc");
|
|
}
|
|
|
|
println!("rerun-if-env-changed=GENERATE_PROTO");
|
|
println!("rerun-if-changed=protobuf/authority_keys.proto");
|
|
println!("rerun-if-changed=protobuf/cast_channel.proto");
|
|
}
|