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.