{"record":{"id":"b8e96ff5bc87559d","repo":"EpicGames/lore","slug":"failed-client-config","errorCode":null,"errorMessage":"Failed client config","messagePattern":"Failed client config","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lore-server/src/quic/stream_handler.rs","lineNumber":893,"sourceCode":"        let server = QuinnServer::start(\n            QuinnConfigBuilder::new()\n                .address(server_addr)\n                .cert_file(cert_path)\n                .pkey_file(key_path)\n                .stream_handler_factory(factory)\n                .build()\n                .unwrap(),\n        )\n        .expect(\"Failed Quinn server start\");\n\n        let mut crypto_config = rustls::ClientConfig::builder()\n            .dangerous()\n            .with_custom_certificate_verifier(insecure_client_auth::SkipServerVerification::new())\n            .with_no_client_auth();\n        crypto_config.alpn_protocols = vec![protocol.as_bytes().into()];\n\n        let client_config = ClientConfig::new(Arc::new(\n            QuicClientConfig::try_from(crypto_config).expect(\"Failed client config\"),\n        ));\n\n        let client_addr: SocketAddr = \"0.0.0.0:0\".parse().unwrap();\n        let mut endpoint = Endpoint::client(client_addr).expect(\"Failed to create client endpoint\");\n        endpoint.set_default_client_config(client_config);\n\n        let connection = endpoint\n            .connect(server_addr, \"localhost\")\n            .unwrap()\n            .await\n            .unwrap();\n        let (send, recv) = connection\n            .open_bi()\n            .await\n            .expect(\"Failed to setup bidirectional channel\");\n\n        Harness {\n            send,","sourceCodeStart":875,"sourceCodeEnd":911,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/quic/stream_handler.rs#L875-L911","documentation":"This expect wraps QuicClientConfig::try_from(crypto_config), converting a rustls::ClientConfig into quinn's QuicClientConfig. The conversion only fails when the rustls config uses an unsupported cipher suite / crypto provider (e.g. rustls built with a provider quinn's quic requirements don't satisfy).","triggerScenarios":"rustls ClientConfig built with a crypto provider or version whose negotiated suites are incompatible with QUIC (non-AEAD ciphers), or mixing rustls versions (e.g. rustls 0.23 with mismatched feature flags) so try_from rejects the config.","commonSituations":"Upgrading rustls/quinn majors and forgetting the CryptoProvider feature setup; building rustls with only non-QUIC-safe cipher suites; duplicate/mismatched ring vs aws-lc-rs providers in the dependency tree.","solutions":["Check the try_from error message naming the unsupported cipher suite or provider","Enable a QUIC-compatible CryptoProvider (ring or aws-lc-rs) feature on rustls/quinn in Cargo.toml","Ensure quinn and rustls versions are compatible (align on the same rustls major, e.g. quinn 0.11 + rustls 0.23)","Build the ClientConfig via the provider-aware builder API (builder_with_protocol_versions + CryptoProvider)"],"exampleFix":"// before\nQuicClientConfig::try_from(crypto_config).expect(\"Failed client config\")\n// after\nQuicClientConfig::try_from(crypto_config)\n    .unwrap_or_else(|e| panic!(\"Failed client config: {e:?} — check rustls CryptoProvider features\"))","handlingStrategy":"validation","validationCode":"// ensure a QUIC-safe provider is configured\n#[cfg(feature = \"rustls\")] {\n    rustls::crypto::ring::default_provider().install_default().ok();\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep quinn and rustls versions aligned (same rustls major)","Enable a QUIC-compatible CryptoProvider feature (ring or aws-lc-rs)","Avoid mixing crypto providers in one dependency tree","Surface the try_from error detail instead of a bare expect"],"tags":["tls","quic","rustls","rust","configuration"],"backgroundTag":"invalid-config-value","analyzedSha":"074eb0b0d1194c997d7cf28b55519e3e197b3e23","analyzedAt":"2026-09-13T09:00:57.509Z","contentChangedAt":"2026-09-13T09:00:57.509Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}