QPID-7693: avoid creating prototype until listen() is called
diff --git a/src/qpid/sys/ssl/SslSocket.cpp b/src/qpid/sys/ssl/SslSocket.cpp
index 731151c..92561cd 100644
--- a/src/qpid/sys/ssl/SslSocket.cpp
+++ b/src/qpid/sys/ssl/SslSocket.cpp
@@ -118,16 +118,9 @@
 }
 }
 
-SslSocket::SslSocket(const std::string& certName, bool clientAuth) :
-    nssSocket(0), certname(certName), prototype(0), hostnameVerification(true)
+SslSocket::SslSocket(const std::string& certName, bool _clientAuth) :
+    nssSocket(0), certname(certName), clientAuth(_clientAuth), prototype(0), hostnameVerification(true)
 {
-    //configure prototype socket:
-    prototype = SSL_ImportFD(0, PR_NewTCPSocket());
-
-    if (clientAuth) {
-        NSS_CHECK(SSL_OptionSet(prototype, SSL_REQUEST_CERTIFICATE, PR_TRUE));
-        NSS_CHECK(SSL_OptionSet(prototype, SSL_REQUIRE_CERTIFICATE, PR_TRUE));
-    }
 }
 
 /**
@@ -226,6 +219,13 @@
 
 int SslSocket::listen(const SocketAddress& sa, int backlog) const
 {
+    //configure prototype socket:
+    prototype = SSL_ImportFD(0, PR_NewTCPSocket());
+
+    if (clientAuth) {
+        NSS_CHECK(SSL_OptionSet(prototype, SSL_REQUEST_CERTIFICATE, PR_TRUE));
+        NSS_CHECK(SSL_OptionSet(prototype, SSL_REQUIRE_CERTIFICATE, PR_TRUE));
+    }
     //get certificate and key (is this the correct way?)
     std::string cName( (certname == "") ? "localhost.localdomain" : certname);
     CERTCertificate *cert = PK11_FindCertFromNickname(const_cast<char*>(cName.c_str()), 0);
diff --git a/src/qpid/sys/ssl/SslSocket.h b/src/qpid/sys/ssl/SslSocket.h
index 733a47a..6f623ba 100644
--- a/src/qpid/sys/ssl/SslSocket.h
+++ b/src/qpid/sys/ssl/SslSocket.h
@@ -73,6 +73,7 @@
 protected:
     mutable PRFileDesc* nssSocket;
     std::string certname;
+    bool clientAuth;
     mutable std::string url;
 
     /**