Hi Glen,

I believe you are mixing old and new methodologies.

NSS and certutil are unrelated to the Qpid Proton C++ library which uses
OpenSSL on Posix systems.  The environment variables QPID_SSL_CERT_XXX are
not used for TLS configuration.

See the example at


https://github.com/apache/qpid-proton/blob/main/cpp/examples/ssl_client_cert.cpp

and see the configuration pertaining to "using_OpenSSL()".  That should
show you where to plug in the "XXX.pem" files you started from.

Cliff

On Fri, Jan 14, 2022 at 7:00 PM Shipley, Glen
<gship...@asrcfederal.com.invalid> wrote:

> Hi All,
>
> I need help on using CA signed certificates with a Qpid Proton C++ app and
> an ActiveMQ broker for SSL.
>
> I have in /home/user/cert_dir the following -
>
> rootCACert.pem
> broker-signedcert.pem
> client-signedcert.pem
> client-key.pem
> password
>
> The password file just contains password which is the password used for
> all.
>
> I then ran the following commands to set up the certificate database -
>
> certutil -N -d /home/user/cert_dir -f /home/user/cert_dir/password
> certutil -A -i broker-signedcert.pem -d /home/user/cert_dir -f
> /home/user/cert_dir/password -n broker -t "P"
> certutil -A -i rootCACert.pem -d /home/user/cert_dir -f
> /home/user/cert_dir/password -n root -t "TC"
>
> I kick off the broker by running the following script -
> setenv JAVA_HOME /programs/Java/jdk1.8.0_121
> setenv PATH ${JAVA_HOME}/bin:${PATH}
> setenv ACTIVEMQ_SSL_OPTS "-Djavax.net.ssl.keyStore=/pki/broker.ks
> -Djavax.net.ssl.keyStorePassword=password
> -Djavax.net.ssl.trustStore=/pki/broker.ts
> -Djavax.net.ssl.trustStorePassword=password -Djavax.net.debug=ssl"
> ./activemq console
>
> I have confidence that the broker is not the problem because I can run -
> openssl s_client -connect localhost:5671 -showcerts -cert
> /home/user/cert_dir/client-signedcert.pem -key
> /home/user/cert_dir/client-key.pem -pass pass:password -CAfile
> /home/user/cert-dir/rootCACert.pem
>
> which returns a verify code of 0 (ok). If I leave off the -CAfile it
> returns with a verify code of 19 (self signed certificate in chain). I can
> see in the broker window that the SSL handshake completed. When from the
> s_client I try to send a message, the broker closes the connection with the
> broker logging - WARN | Connection attempt from non AMQP v1.0 client.
>
>
> My qpid proton app code has -
> void on_container_start(proton:container &c)
> {
>    std:cout << "-INFO- on_container_start -" << std::endl;
>    proton::ssl_certificate certificate("/pki/client-signedcert.pem",
> "/pki/client-private.pem", "password");
>
>    proton::ssl::verify_mode = proton::ssl::VERIFY_PEER_NAME;
>
>    proton::ssl_client_options sslClientOptions(certificate,
> "/pki/broker-signedcert.pem", ssl_verify_mode);
>
>    proton::connection_options connectionOptions;
>    connectionOptions.ssl_client_options(sslClientOptions);
>    connectionOptions.virtual_host("broker"); // this is the CN of the
> broker certificate
>    connectionOptions.idle_timeout(proton::duration::FOREVER);
>
>    c.client_connection_options(connectionOptions);
>
>    c.connect("localhost:5671", connectionOptions); // broker runs on same
> machine
> }
>
> I launch the client code with a script that has
> export QPID_SSL_CERT_DB="/home/user/cert_dir"
> export QPID_SSL_CERT_PASSWORD_FILE="/home/user/cert_dir/password"
>
>
> Client CA signed certificates (fails)
> SSL:TRACE:Client SSL socket created.
> EVENT:DEBUG:(PN_CONNECTION_INIT, pn_connection<0x82107e8>
> EVENT:DEBUG:(PN_CONNECTION_BOUND, pn_connection<0x82107e8>
> SSL:TRACE:Gathered 8 bytes from app to send to peer
> SSL:TRACE:Detected read-blocked
> SSL:TRACE:Wrote 280 bytes to BIO Layer, 0 left over
> SSL:TRACE:Detected read-blocked
> SSL:TRACE:process_output_ssl() returning 0
> SSL:TRACE:Detected read-blocked
> SSL:TRACE:process_output_ssl() returning 0
> SSL:TRACE:process_input_ssl( data size=3695 )
> SSL:TRACE:Wrote 3695 bytes to BIO Layer, 0 left over
> AMQP:ERROR:amqp:connection:framing-error SSL Failure error:14090086:SSL
> routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
>
> Broker CA signed certificates
> *** ServerHelloDone
> ActiveMQ Transport: ssl:///192.168.107.206.45206, WRITE: TLSv1.2
> Handshake, length = 3690
> ActiveMQ Transport: ssl:///192.168.107.206.45206, received EOFException:
> error
> ActiveMQ Transport: ssl:///192.168.107.206.45206, handling exception:
> javax.net.ssl.SSLHandshakeException: Remote host closed connection during
> handshake
>
> Can anyone help with what I need to do differently?
>
> Thanks,
> Glen
>
>
> ________________________________
>
> The preceding message (including attachments) is covered by the Electronic
> Communication Privacy Act, 18 U.S.C. sections 2510-2512, is intended only
> for the person or entity to which it is addressed, and may contain
> information that is confidential, protected by attorney-client or other
> privilege, or otherwise protected from disclosure by law. If you are not
> the intended recipient, you are hereby notified that any retention,
> dissemination, distribution, or copying of this communication is strictly
> prohibited. Please reply to the sender that you have received the message
> in error and destroy the original message and all copies.
>

Reply via email to