I have deployed Qpid Dispatch 1.19.0 and have successfully configured an SSL profile where the Proton-j2 client (1.0.0-M22) is authenticated/authorized using the EXTERNAL SASL mechanism so that the Common Name in the client certificate must match the userId of the AMQP message. So I have a listener like this:
listener { port: 5671 role: normal authenticatePeer: true saslMechanisms: EXTERNAL sslProfile: mesh-clients requireSsl: true } and a sslProfile like this: sslProfile { name: mesh-clients certFile: /vault/secrets/oi-amqp-mesh-certs-external.crt privateKeyFile: /vault/secrets/oi-amqp-mesh-certs-external.key caCertFile: /vault/secrets/client.crt uidFormat: n } So far everything is good. However I now wish to expose the service through a proxy using websockets. To this end I have amended the config to add a second identical listener but with http: true, knowing that the websockets parameter will then default to true. listener { port: 8080 role: normal http: true authenticatePeer: true saslMechanisms: EXTERNAL sslProfile: mesh-clients requireSsl: true } In the Proton-2j client I similarly enable websockets: options.transportOptions().useWebSockets(true); When I try to send messages over websockets on port 8080 the Proton client say that Qpid Dispatch did not offer any SASL Mechanisms: Caused by: javax.security.sasl.SaslException: > *Could not find a suitable SASL Mechanism. No supported mechanism, or none > usable with the available credentials. Server offered: []* at > org.apache.qpid.protonj2.engine.sasl.client.SaslAuthenticator.handleSaslMechanisms(SaslAuthenticator.java:97) The Qpid Dispatch logs shows that it has upgraded from HTTP to AMQPWS but the connection was then aborted: 2024-12-02 15:07:46.141919 +0000 SERVER (debug) [187] upgraded HTTP > connection from 127.0.0.1 to AMQPWS > 2024-12-02 15:07:46.142165 +0000 SERVER (trace) [C187] Configuring SSL on > :8080 > 2024-12-02 15:07:46.154025 +0000 SERVER (info) [C187] Accepted connection > to :8080 from 127.0.0.1 > 2024-12-02 15:07:46.361440 +0000 SERVER (info) [C187] Connection from > 127.0.0.1 (to :8080) failed: amqp:connection:framing-error connection > aborted I'm guessing that the client certificate isn't being passed from websocks layer to the SASL layer so Qpid Dispatch has no reason to offer EXTERNAL and so the Proton client aborts the connection. I would be very grateful if you could confirm whether Qpid Proton/Dispatch support client certificates over websockets. And if so what additional config is required other than enabling the websockets feature? Many Thanks Mike This email (including any attachments) may contain confidential and/or privileged information or information otherwise protected from disclosure. If you are not the intended recipient, please notify the sender immediately, do not copy this message or any attachments and do not use it for any purpose or disclose its content to any person, but delete this message and any attachments from your system. Airbus Defence and Space Limited disclaims any and all liability if this email transmission was virus corrupted, altered or falsified. -o- Emails to Airbus Defence and Space Limited may be processed, recorded and monitored outside the UK. -o- Airbus Defence and Space Limited, Registered in England and Wales No. 2449259 Registered Office: Gunnels Wood Road, Stevenage, Hertfordshire, SG1 2AS, England