Hi,
I made a change to qpid proton cpp which allows to use a client certificate
without the need to use a custom certifticate trust database.
I cannot create aJIRA account to submit a patch. So I am attaching the change
here. Can someone, please, add that to the code for the future qpid proton
releases? Thanks.
Kind Regards
Marko
The change:
diff --git a/cpp/include/proton/ssl.hpp b/cpp/include/proton/ssl.hpp
index cbec8767..d978fcb8 100644
--- a/cpp/include/proton/ssl.hpp
+++ b/cpp/include/proton/ssl.hpp
@@ -163,6 +163,10 @@ class ssl_client_options {
enum ssl::verify_mode = ssl::VERIFY_PEER_NAME);
/// Create SSL client with a client certificate.
+ PN_CPP_EXTERN ssl_client_options(const ssl_certificate&,
+ enum ssl::verify_mode = ssl::VERIFY_PEER_NAME);
+
+ /// Create SSL client with a client certificate and a custom certificate
trust database.
PN_CPP_EXTERN ssl_client_options(const ssl_certificate&, const std::string
&trust_db,
enum ssl::verify_mode = ssl::VERIFY_PEER_NAME);
diff --git a/cpp/src/ssl_options.cpp b/cpp/src/ssl_options.cpp
index f74f014e..40f5e08f 100644
--- a/cpp/src/ssl_options.cpp
+++ b/cpp/src/ssl_options.cpp
@@ -131,6 +131,12 @@ ssl_client_options::ssl_client_options(const std::string
&trust_db, enum ssl::ve
set_client_verify_mode(dom, mode);
}
+ssl_client_options::ssl_client_options(const ssl_certificate &cert, enum
ssl::verify_mode mode) : impl_(new impl) {
+ pn_ssl_domain_t* dom = impl_->pn_domain();
+ set_cred(dom, cert.certdb_main_, cert.certdb_extra_, cert.passwd_,
cert.pw_set_);
+ set_client_verify_mode(dom, mode);
+}
+
ssl_client_options::ssl_client_options(const ssl_certificate &cert, const
std::string &trust_db, enum ssl::verify_mode mode) : impl_(new impl) {
pn_ssl_domain_t* dom = impl_->pn_domain();
set_cred(dom, cert.certdb_main_, cert.certdb_extra_, cert.passwd_,
cert.pw_set_);
On Wed, 2022-12-07 at 08:27 +0000, Marko Hrastovec wrote:
Hi,
can please someone help me to resolve an issue in Qpid Proton C++?
I need to connect to AMQP server securely with a client certificate
authentication. Server uses a certificate signed by a trusted CA. I can load a
certificate into ssl_client_options, but the constructor for
ssl_client_options, requires a trust_db parameter as shown in the declaration
below:
ssl_client_options (const ssl_certificate &, const std::string &trust_db, enum
ssl::verify_mode=ssl::VERIFY_PEER_NAME)
When I connect with these options, I have to provide some trust_db, but I don't
know how to provide a default certificate trust database. For now I have set
the verify_mode to proton::ssl::ANONYMOUS_PEER, to skip servers identification
check. If system's default trust certificate database would be used,
proton::ssl::VERIFY_PEER_NAME should work just fine, but I don't know how to
use it with this ss_client_options constructor.
Is there a way to provide ssl_certificate to ssl_client_options and leave the
default certificate trust database at the same time?
Regards
Marko