review 001: alktls v1 implementation — correctness, security, coverage
Independent post-port review (behavior-preservation + security +
coverage focus; the alknet sources consulted only as prior art).
Findings:
- S-1 [major, security posture]: AcceptAnyCertVerifier does not verify
the client CertificateVerify (no proof-of-possession) — executable
probe confirms a victim-cert + attacker-key handshake completes and
the server extracts the victim's fingerprint (both X.509 and RFC
7250 SPKI variants). Doc/ADR remediation, not a behavior change
(the shape is the alknet-inherited design).
- C-1..C-4 [minor]: self-signed cert validity 1975-4096 undocumented;
acme-tls/1 duplicated if caller supplies it; empty ACME domains
construct without validation; malformed/case-shifted fingerprint
pins reject at handshake with no config-layer doc.
- U-1..U-3 [minor, coverage]: ACME event-loop body uncovered (23
lines); resolvers' resolve() methods uncovered; zero
handshake-level tests (fail-closed/pin/raw-key paths asserted only
structurally); webpki-roots fallback loop nondeterministically
covered.
- N-1..N-7: doc nits, two non-findings (dangerous()-downgrade suspect
retracted; zeroize marker verified inert via ed25519-dalek default
features), packaging noise (tasks/ + docs/architecture/ ship),
requires_raw_public_keys interaction note (raw-only clients fail
against request-but-don't-require), http:// custom ACME directory
warning.
- Behavior preservation: full src/ diff vs alknet-tls + alknet-core —
zero unrecorded behavioral divergences (Part B).
Verification: cargo test 68 default / 75 --all-features; clippy -D
warnings (both configs); fmt --check; cargo doc --no-deps;
cargo publish --dry-run --allow-dirty; cargo llvm-cov --all-features
95.32% line / 94.48% functions, uncovered-line inventory in the doc;
temporary review probes (fingerprint pins, DER adversarial battery,
empty-PEM, ACME construction edges, impersonation handshake) all run
and deleted after the run.