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.