Author: kgiusti
Date: Mon Oct 8 18:51:19 2012
New Revision: 1395720
URL: http://svn.apache.org/viewvc?rev=1395720&view=rev
Log:
PROTON-53: add infrastructure for SSL unit tests
Added:
qpid/proton/trunk/tests/proton_tests/ssl.py (with props)
qpid/proton/trunk/tests/proton_tests/ssl_db/
qpid/proton/trunk/tests/proton_tests/ssl_db/README.txt (with props)
qpid/proton/trunk/tests/proton_tests/ssl_db/ca-certificate.pem
qpid/proton/trunk/tests/proton_tests/ssl_db/client-certificate.pem
qpid/proton/trunk/tests/proton_tests/ssl_db/client-private-key.pem
qpid/proton/trunk/tests/proton_tests/ssl_db/server-certificate.pem
qpid/proton/trunk/tests/proton_tests/ssl_db/server-private-key.pem
Modified:
qpid/proton/trunk/proton-c/bindings/python/proton.py
qpid/proton/trunk/proton-c/src/ssl/openssl.c
qpid/proton/trunk/tests/proton_tests/__init__.py
Modified: qpid/proton/trunk/proton-c/bindings/python/proton.py
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/python/proton.py?rev=1395720&r1=1395719&r2=1395720&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/python/proton.py (original)
+++ qpid/proton/trunk/proton-c/bindings/python/proton.py Mon Oct 8 18:51:19
2012
@@ -1659,11 +1659,49 @@ class SASL(object):
def done(self, outcome):
pn_sasl_done(self._sasl, outcome)
+class SSLException(TransportException):
+ pass
+
class SSL(object):
+ def _check(self, err):
+ if err < 0:
+ exc = EXCEPTIONS.get(err, SSLException)
+ raise exc("SSL failure.")
+ else:
+ return err
+
def __init__(self, transport):
self._ssl = pn_ssl(transport._trans)
+ MODE_CLIENT = PN_SSL_MODE_CLIENT
+ MODE_SERVER = PN_SSL_MODE_SERVER
+
+ def init(self, mode):
+ return self._check( pn_ssl_init(self._ssl, mode) )
+
+ def set_credentials(self, cert_file, key_file, password):
+ return self._check( pn_ssl_set_credentials(self._ssl, cert_file, key_file,
+ password) )
+
+ def set_trusted_ca_db(self, certificate_db):
+ return self._check( pn_ssl_set_trusted_ca_db(self._ssl, certificate_db) )
+
+ def allow_unsecured_client(self):
+ return self._check( pn_ssl_allow_unsecured_client(self._ssl) )
+
+ VERIFY_PEER = PN_SSL_VERIFY_PEER
+ NO_VERIFY_PEER = PN_SSL_NO_VERIFY_PEER
+
+ def set_peer_authentication(self, verify_mode, trusted_CAs=None):
+ return self._check( pn_ssl_set_peer_authentication(self._ssl, verify_mode,
+ trusted_CAs) )
+
+ def peer_authentication(self):
+ # @TODO: fix up buffer return value...
+ pass
+
+
__all__ = ["Messenger", "Message", "ProtonException", "MessengerException",
"MessageException", "Timeout", "Data", "Endpoint", "Connection",
"Session", "Link", "Sender", "Receiver", "Delivery", "Transport",
Modified: qpid/proton/trunk/proton-c/src/ssl/openssl.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/ssl/openssl.c?rev=1395720&r1=1395719&r2=1395720&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/ssl/openssl.c (original)
+++ qpid/proton/trunk/proton-c/src/ssl/openssl.c Mon Oct 8 18:51:19 2012
@@ -121,7 +121,7 @@ static void _log_ssl_error(pn_ssl_t *ssl
unsigned long err = ERR_get_error();
while (err) {
ERR_error_string_n(err, buf, sizeof(buf));
- _log(ssl, "%s\n", buf);
+ _log_error("%s\n", buf);
err = ERR_get_error();
}
}
@@ -204,6 +204,7 @@ int pn_ssl_set_credentials( pn_ssl_t *ss
if (SSL_CTX_use_certificate_chain_file(ssl->ctx, certificate_file) != 1) {
_log_error("SSL_CTX_use_certificate_chain_file( %s ) failed\n",
certificate_file);
+ _log_ssl_error(ssl);
return -3;
}
@@ -215,12 +216,14 @@ int pn_ssl_set_credentials( pn_ssl_t *ss
if (SSL_CTX_use_PrivateKey_file(ssl->ctx, private_key_file,
SSL_FILETYPE_PEM) != 1) {
_log_error("SSL_CTX_use_PrivateKey_file( %s ) failed\n", private_key_file);
+ _log_ssl_error(ssl);
return -4;
}
if (SSL_CTX_check_private_key(ssl->ctx) != 1) {
_log_error("The key file %s is not consistent with the certificate %s\n",
private_key_file, certificate_file);
+ _log_ssl_error(ssl);
return -5;
}
@@ -509,38 +512,41 @@ static ssize_t process_input_ssl( pn_tra
_log( ssl, "process_input_ssl( data size=%d )\n",available );
ssize_t consumed = 0;
+ bool work_pending;
+ bool shutdown_input = (available == 0); // caller is closed
- // Write to network bio as much as possible, consuming bytes/available
+ do {
+ work_pending = false;
- if (available > 0) {
- int written = BIO_write( ssl->bio_net_io, input_data, available );
- if (written > 0) {
- input_data += written;
- available -= written;
- consumed += written;
- ssl->read_blocked = false;
- _log( ssl, "Wrote %d bytes to BIO Layer, %d left over\n", written,
available );
- }
- } else if (available == 0) {
- // lower layer (caller) has closed. Close the WRITE side of the BIO.
This will cause
- // an EOF to be passed to SSL once all pending inbound data has been
consumed.
- _log( ssl, "Lower layer closed - shutting down BIO write side\n");
- (void)BIO_shutdown_wr( ssl->bio_net_io );
- }
-
- // Read all available data from the SSL socket
-
- if (!ssl->ssl_closed) {
- //int pending = BIO_pending(ssl->bio_ssl);
- //int available = pn_min( (APP_BUF_SIZE - ssl->in_count), pending );
- int available = APP_BUF_SIZE - ssl->in_count;
- while (available > 0) {
- int written = BIO_read( ssl->bio_ssl, &ssl->inbuf[ssl->in_count],
available );
+ // Write to network bio as much as possible, consuming bytes/available
+
+ if (available > 0) {
+ int written = BIO_write( ssl->bio_net_io, input_data, available );
if (written > 0) {
- _log( ssl, "Read %d bytes from SSL socket for app\n", written );
- _log_clear_data( ssl, &ssl->inbuf[ssl->in_count], written );
- ssl->in_count += written;
+ input_data += written;
available -= written;
+ consumed += written;
+ ssl->read_blocked = false;
+ work_pending = (available > 0);
+ _log( ssl, "Wrote %d bytes to BIO Layer, %d left over\n", written,
available );
+ }
+ } else if (shutdown_input) {
+ // lower layer (caller) has closed. Close the WRITE side of the BIO.
This will cause
+ // an EOF to be passed to SSL once all pending inbound data has been
consumed.
+ _log( ssl, "Lower layer closed - shutting down BIO write side\n");
+ (void)BIO_shutdown_wr( ssl->bio_net_io );
+ shutdown_input = false;
+ }
+
+ // Read all available data from the SSL socket
+
+ if (!ssl->ssl_closed && ssl->in_count < APP_BUF_SIZE) {
+ int read = BIO_read( ssl->bio_ssl, &ssl->inbuf[ssl->in_count],
APP_BUF_SIZE - ssl->in_count );
+ if (read > 0) {
+ _log( ssl, "Read %d bytes from SSL socket for app\n", read );
+ _log_clear_data( ssl, &ssl->inbuf[ssl->in_count], read );
+ ssl->in_count += read;
+ work_pending = work_pending || ssl->in_count < APP_BUF_SIZE;
} else {
if (!BIO_should_retry(ssl->bio_ssl)) {
_log(ssl, "Read from SSL socket failed - SSL connection closed!!\n");
@@ -557,47 +563,47 @@ static ssize_t process_input_ssl( pn_tra
_log(ssl, "Detected read-blocked\n");
}
}
- break;
}
}
- }
- // write incoming data to app layer
+ // write incoming data to app layer
- if (!ssl->app_input_closed) {
- char *data = ssl->inbuf;
- while (ssl->in_count > 0 || ssl->ssl_closed) { /* if ssl_closed, send 0
count */
- ssize_t consumed = transport->process_input(transport, data,
ssl->in_count);
- if (consumed > 0) {
- ssl->in_count -= consumed;
- data += consumed;
- _log( ssl, "Application consumed %d bytes from peer\n", (int) consumed
);
- } else {
- if (consumed < 0) {
- _log(ssl, "Application layer closed its input, error=%d (discarding
%d bytes)\n",
- (int) consumed, (int)ssl->in_count);
- ssl->in_count = 0; // discard any pending input
- ssl->app_input_closed = consumed;
- if (ssl->app_output_closed && ssl->out_count) {
- // both sides of app closed, and no more app output pending:
- start_ssl_shutdown(ssl);
- }
- /* @todo: fix this - duplicate code - transport does the same */
- if (consumed == PN_EOS) {
- if (transport->disp->trace & (PN_TRACE_RAW | PN_TRACE_FRM))
- pn_dispatcher_trace(transport->disp, 0, "<- EOS\n");
- } else {
- pn_dispatcher_trace(transport->disp, 0, "ERROR[%i] %s\n",
- pn_error_code(transport->error),
- pn_error_text(transport->error));
+ if (!ssl->app_input_closed) {
+ char *data = ssl->inbuf;
+ if (ssl->in_count > 0 || ssl->ssl_closed) { /* if ssl_closed, send 0
count */
+ ssize_t consumed = transport->process_input(transport, data,
ssl->in_count);
+ if (consumed > 0) {
+ ssl->in_count -= consumed;
+ data += consumed;
+ work_pending = work_pending || ssl->in_count > 0;
+ _log( ssl, "Application consumed %d bytes from peer\n", (int)
consumed );
+ } else {
+ if (consumed < 0) {
+ _log(ssl, "Application layer closed its input, error=%d
(discarding %d bytes)\n",
+ (int) consumed, (int)ssl->in_count);
+ ssl->in_count = 0; // discard any pending input
+ ssl->app_input_closed = consumed;
+ if (ssl->app_output_closed && ssl->out_count) {
+ // both sides of app closed, and no more app output pending:
+ start_ssl_shutdown(ssl);
+ }
+ /* @todo: fix this - duplicate code - transport does the same */
+ if (consumed == PN_EOS) {
+ if (transport->disp->trace & (PN_TRACE_RAW | PN_TRACE_FRM))
+ pn_dispatcher_trace(transport->disp, 0, "<- EOS\n");
+ } else {
+ pn_dispatcher_trace(transport->disp, 0, "ERROR[%i] %s\n",
+ pn_error_code(transport->error),
+ pn_error_text(transport->error));
+ }
}
}
- break;
}
+ if (ssl->in_count > 0 && data != ssl->inbuf)
+ memmove( ssl->inbuf, data, ssl->in_count );
}
- if (ssl->in_count > 0 && data != ssl->inbuf)
- memmove( ssl->inbuf, data, ssl->in_count );
- }
+
+ } while (work_pending);
//_log(ssl, "ssl_closed=%d in_count=%d app_input_closed=%d
app_output_closed=%d\n",
// ssl->ssl_closed, ssl->in_count, ssl->app_input_closed,
ssl->app_output_closed );
@@ -619,14 +625,17 @@ static ssize_t process_output_ssl( pn_tr
if (ssl->ssl == NULL && init_ssl_socket(ssl)) return PN_ERR;
ssize_t written = 0;
+ bool work_pending;
- // first, get any pending application output, if possible
+ do {
+ work_pending = false;
+ // first, get any pending application output, if possible
- if (!ssl->app_output_closed) {
- while (ssl->out_count < APP_BUF_SIZE) {
+ if (!ssl->app_output_closed && ssl->out_count < APP_BUF_SIZE) {
ssize_t app_bytes = transport->process_output(transport,
&ssl->outbuf[ssl->out_count], APP_BUF_SIZE - ssl->out_count);
if (app_bytes > 0) {
ssl->out_count += app_bytes;
+ work_pending = ssl->out_count < APP_BUF_SIZE;
_log( ssl, "Gathered %d bytes from app to send to peer\n", app_bytes );
} else {
if (app_bytes < 0) {
@@ -642,64 +651,65 @@ static ssize_t process_output_ssl( pn_tr
pn_error_text(transport->error));
}
}
- break;
}
}
- }
- // now push any pending app data into the socket
+ // now push any pending app data into the socket
- if (!ssl->ssl_closed) {
- char *data = ssl->outbuf;
- while (ssl->out_count > 0) {
- int written = BIO_write( ssl->bio_ssl, data, ssl->out_count );
- if (written > 0) {
- data += written;
- ssl->out_count -= written;
- _log( ssl, "Wrote %d bytes from app to socket\n", written );
- } else {
- if (!BIO_should_retry(ssl->bio_ssl)) {
- _log(ssl, "Write to SSL socket failed - SSL connection closed!!\n");
- _log_ssl_error(ssl);
- start_ssl_shutdown(ssl); // KAG: not sure - this may be
necessary
- ssl->out_count = 0; // can no longer write to socket, so erase
app output data
- ssl->ssl_closed = true;
+ if (!ssl->ssl_closed) {
+ char *data = ssl->outbuf;
+ if (ssl->out_count > 0) {
+ int wrote = BIO_write( ssl->bio_ssl, data, ssl->out_count );
+ if (wrote > 0) {
+ data += wrote;
+ ssl->out_count -= wrote;
+ work_pending = work_pending || ssl->out_count > 0;
+ _log( ssl, "Wrote %d bytes from app to socket\n", wrote );
} else {
- if (BIO_should_read( ssl->bio_ssl )) {
- ssl->read_blocked = true;
- _log(ssl, "Detected read-blocked\n");
- }
- if (BIO_should_write( ssl->bio_ssl )) {
- ssl->write_blocked = true;
- _log(ssl, "Detected write-blocked\n");
+ if (!BIO_should_retry(ssl->bio_ssl)) {
+ _log(ssl, "Write to SSL socket failed - SSL connection
closed!!\n");
+ _log_ssl_error(ssl);
+ start_ssl_shutdown(ssl); // KAG: not sure - this may be
necessary
+ ssl->out_count = 0; // can no longer write to socket, so
erase app output data
+ ssl->ssl_closed = true;
+ } else {
+ if (BIO_should_read( ssl->bio_ssl )) {
+ ssl->read_blocked = true;
+ _log(ssl, "Detected read-blocked\n");
+ }
+ if (BIO_should_write( ssl->bio_ssl )) {
+ ssl->write_blocked = true;
+ _log(ssl, "Detected write-blocked\n");
+ }
}
}
- break;
}
- }
- if (ssl->out_count == 0) {
- if (ssl->app_input_closed && ssl->app_output_closed) {
- // application is done sending/receiving data, and all buffered output
data has
- // been written to the SSL socket
- start_ssl_shutdown(ssl);
+ if (ssl->out_count == 0) {
+ if (ssl->app_input_closed && ssl->app_output_closed) {
+ // application is done sending/receiving data, and all buffered
output data has
+ // been written to the SSL socket
+ start_ssl_shutdown(ssl);
+ }
+ } else if (data != ssl->outbuf) {
+ memmove( ssl->outbuf, data, ssl->out_count );
}
- } else if (data != ssl->outbuf) {
- memmove( ssl->outbuf, data, ssl->out_count );
}
- }
- // read from the network bio as much as possible, filling the buffer
- if (max_len) {
- int available = BIO_read( ssl->bio_net_io, buffer, max_len );
- if (available > 0) {
- max_len -= available;
- buffer += available;
- written += available;
- ssl->write_blocked = false;
- _log( ssl, "Read %d bytes from BIO Layer\n", available );
+ // read from the network bio as much as possible, filling the buffer
+ if (max_len) {
+ int available = BIO_read( ssl->bio_net_io, buffer, max_len );
+ if (available > 0) {
+ max_len -= available;
+ buffer += available;
+ written += available;
+ ssl->write_blocked = false;
+ work_pending = work_pending || max_len > 0;
+ _log( ssl, "Read %d bytes from BIO Layer\n", available );
+ }
}
- }
+
+ } while (work_pending);
//_log(ssl, "written=%d ssl_closed=%d in_count=%d app_input_closed=%d
app_output_closed=%d bio_pend=%d\n",
// written, ssl->ssl_closed, ssl->in_count, ssl->app_input_closed,
ssl->app_output_closed, BIO_pending(ssl->bio_net_io) );
Modified: qpid/proton/trunk/tests/proton_tests/__init__.py
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/__init__.py?rev=1395720&r1=1395719&r2=1395720&view=diff
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/__init__.py (original)
+++ qpid/proton/trunk/tests/proton_tests/__init__.py Mon Oct 8 18:51:19 2012
@@ -23,3 +23,5 @@ import proton_tests.message
import proton_tests.messenger
import proton_tests.sasl
import proton_tests.transport
+import proton_tests.ssl
+
Added: qpid/proton/trunk/tests/proton_tests/ssl.py
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/ssl.py?rev=1395720&view=auto
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/ssl.py (added)
+++ qpid/proton/trunk/tests/proton_tests/ssl.py Mon Oct 8 18:51:19 2012
@@ -0,0 +1,99 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import os, common
+import subprocess
+from proton import *
+
+
+class SslTest(common.Test):
+
+ def __init__(self, *args):
+ common.Test.__init__(self, *args)
+
+ def setup(self):
+ self.t_server = Transport()
+ self.server = SSL(self.t_server)
+ self.server.init(SSL.MODE_SERVER)
+ self.t_client = Transport()
+ self.client = SSL(self.t_client)
+ self.client.init(SSL.MODE_CLIENT)
+
+ def teardown(self):
+ self.t_client = None
+ self.t_server = None
+
+ def _pump(self):
+ while True:
+ out_client = self.t_client.output(1024)
+ out_server = self.t_server.output(1024)
+ if out_client: self.t_server.input(out_client)
+ if out_server: self.t_client.input(out_server)
+ if not out_client and not out_server: break
+
+ def _testpath(self, file):
+ """ Set the full path to the certificate,keyfile, etc. for the test.
+ """
+ return os.path.join(os.path.dirname(__file__),
+ "ssl_db/%s" % file)
+
+ def test_server_authentication(self):
+ """ Simple SSL connection with authentication of the server
+ """
+ self.server.set_credentials(self._testpath("server-certificate.pem"),
+ self._testpath("server-private-key.pem"),
+ "server-password")
+ self.client.set_trusted_ca_db(self._testpath("ca-certificate.pem"))
+
+ client_conn = Connection()
+ self.t_client.bind(client_conn)
+ server_conn = Connection()
+ self.t_server.bind(server_conn)
+ client_conn.open()
+ server_conn.open()
+ self._pump()
+ client_conn.close()
+ server_conn.close()
+ self._pump()
+
+
+ def test_client_authentication(self):
+ """ @TODO: fix
+ """
+ self.server.set_credentials(self._testpath("server-certificate.pem"),
+ self._testpath("server-private-key.pem"),
+ "server-password")
+ self.server.set_trusted_ca_db(self._testpath("ca-certificate.pem"))
+ self.client.set_credentials(self._testpath("client-certificate.pem"),
+ self._testpath("client-private-key.pem"),
+ "client-password")
+ self.client.set_trusted_ca_db(self._testpath("ca-certificate.pem"))
+
+ client_conn = Connection()
+ self.t_client.bind(client_conn)
+ server_conn = Connection()
+ self.t_server.bind(server_conn)
+ client_conn.open()
+ server_conn.open()
+ self._pump()
+ client_conn.close()
+ server_conn.close()
+ self._pump()
+
+
Propchange: qpid/proton/trunk/tests/proton_tests/ssl.py
------------------------------------------------------------------------------
svn:eol-style = native
Added: qpid/proton/trunk/tests/proton_tests/ssl_db/README.txt
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/ssl_db/README.txt?rev=1395720&view=auto
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/ssl_db/README.txt (added)
+++ qpid/proton/trunk/tests/proton_tests/ssl_db/README.txt Mon Oct 8 18:51:19
2012
@@ -0,0 +1,35 @@
+The following certificate files are used by the SSL unit tests (ssl.py):
+
+ca-certificate.pem - contains the public certificate identifying a "trusted"
Certificate
+Authority. This certificate is used to sign the certificates that identify
the SSL
+servers and clients run by the tests.
+
+client-certificate.pem - the public certificate used to identify the client.
Signed by
+the CA.
+
+client-private-key.pem - encrypted key used to create client-certificate.pem.
Password is
+"client-password"
+
+server-certificate.pem - the public certificate used to identify the server.
Signed by
+the CA.
+
+server-private-key.pem - encrypted key used to create server-certificate.pem.
Password is
+"server-password"
+
+
+These certificates have been created using the OpenSSL tool.
+
+The following commands were used to create these certificates:
+
+# Create a self-signed certificate for the CA, and a private key to sign
certificate requests:
+ openssl req -x509 -newkey rsa:2048 -keyout ca-private-key.pem -passout
pass:ca-password -out ca-certificate.pem -days 99999 -subj "/O=Trust Me,
Inc/CN=127.0.0.1"
+
+# Create a certificate request for the server certificate. Use the CA's
certificate to sign it:
+ openssl req -newkey rsa:2048 -keyout server-private-key.pem -passout
pass:server-password -out server-request.pem -subj "/O=Server/CN=127.0.0.1"
+ openssl x509 -req -in server-request.pem -CA ca-certificate.pem -CAkey
ca-private-key.pem -CAcreateserial -passin pass:ca-password -days 99999 -out
server-certificate.pem
+
+# Create a certificate request for the client certificate. Use the CA's
certificate to sign it:
+ openssl req -newkey rsa:2048 -keyout client-private-key.pem -passout
pass:client-password -out client-request.pem -subj "/O=Client/CN=127.0.0.1"
+ openssl x509 -req -in client-request.pem -CA ca-certificate.pem -CAkey
ca-private-key.pem -CAcreateserial -passin pass:ca-password -days 99999 -out
client-certificate.pem
+
+
Propchange: qpid/proton/trunk/tests/proton_tests/ssl_db/README.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: qpid/proton/trunk/tests/proton_tests/ssl_db/ca-certificate.pem
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/ssl_db/ca-certificate.pem?rev=1395720&view=auto
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/ssl_db/ca-certificate.pem (added)
+++ qpid/proton/trunk/tests/proton_tests/ssl_db/ca-certificate.pem Mon Oct 8
18:51:19 2012
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDLTCCAhWgAwIBAgIJAJde1oDZXs6MMA0GCSqGSIb3DQEBBQUAMCwxFjAUBgNV
+BAoMDVRydXN0IE1lLCBJbmMxEjAQBgNVBAMMCTEyNy4wLjAuMTAgFw0xMjEwMDgx
+ODE3NDVaGA8yMjg2MDcyMzE4MTc0NVowLDEWMBQGA1UECgwNVHJ1c3QgTWUsIElu
+YzESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAuxhqdM4r/N6cfR4UJuWCmuey5ukyHu5+j+bEv7pvE+sZhND9/gNvlFUa
+jS214kK2qq2Z7YUYo9+NLu4zq7i0oRviozIHT+SWeF1fK78ENMiOI3TjDzIxspwG
+P6oQqt3cHCx+eB1UPkFDQNcY8RBznizveDvteJW7MHvB9XPacJtKPIQawcLc/u4D
+E3v3lkCygiOte2UC61mRQMFuhehZHjGzxaD9OgL7O73H86sUWNedLkhFtIxmjhwV
+yjp9Q8rSXzohEgtbD5o39Vg++wcz4SD9EMfPtPDfbqfbih3hIV1jrsDjQfUR+9ki
+5y9OATK0QOct97pakcU3Mc3jvij4rwIDAQABo1AwTjAdBgNVHQ4EFgQUnbPv4TOU
+pq87b3KOMPDjyU3dLLswHwYDVR0jBBgwFoAUnbPv4TOUpq87b3KOMPDjyU3dLLsw
+DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEALChGqkryDLDRx2ZcB1fD
+h0qtsOSyiQl3OEDLfFjvmgn3vCWtc2d74RaZELdcHHSxyPsBuS6BBDEzouPh3xgR
+RM559WEcvpgLHgJuBJ8OVvNomt6ZWXnhqpelFs0aE28dFqRqDw0cCZQN0TiXeFqV
+IVvnMoqQy2sEBHk9BSTjFTbKO8oTPDjoG1lpjUwnWsl3CK+7msGhWX1pB9Uos1v5
+csKq1UH5D9StDquMAG6Xr6wbBk1dcWOO0Pgm0HI4ggf8uilHEOjCM6TmbAj82zFJ
+kYA8iInxvLRcqdC/a9fjzUUbvghNg1QTlYPjzKFGxY8qlyOIM/wuxV9O0pcG+2js
+xA==
+-----END CERTIFICATE-----
Added: qpid/proton/trunk/tests/proton_tests/ssl_db/client-certificate.pem
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/ssl_db/client-certificate.pem?rev=1395720&view=auto
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/ssl_db/client-certificate.pem (added)
+++ qpid/proton/trunk/tests/proton_tests/ssl_db/client-certificate.pem Mon Oct
8 18:51:19 2012
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIICzzCCAbcCCQDmi9rco1HVJjANBgkqhkiG9w0BAQUFADAsMRYwFAYDVQQKDA1U
+cnVzdCBNZSwgSW5jMRIwEAYDVQQDDAkxMjcuMC4wLjEwIBcNMTIxMDA4MTgxOTAz
+WhgPMjI4NjA3MjMxODE5MDNaMCUxDzANBgNVBAoMBkNsaWVudDESMBAGA1UEAwwJ
+MTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxnDezsFX
+yi6P/bBR+KfPnosVjbV4NrkUwZMuy3ZyEj2jkcoE4ShtZhk/d4ZbG1wUTYYU15kJ
+KfBm1/58oe0qNm4D17Y+hvpSPndz5//YvCtgbLX1BCJKHZkK8Oifk5OAfi0CwRBV
+HrRXbazF3uDo4L2dAt0RAqWtgkbMMBE3o8syK+mk1Ip9QerEd0wJreH5OqqpK3Xh
+Qflz1DiWvUeQb5E9Tc0rBcZlEd0hSlRXnsQdu1cC0rmEF48uf9hTRTwIvqwl3ash
+QHHpgRjmS7g4F4GfOewK1spxxJeZuy7sjLogSZR3NFPD1kmUYwNmfRi9OM6MaDtz
+JGNcpCHc5P17lQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBF6L4pLOXxHAB5xmMF
+JFmKOXqd602wKU5a1RrXoRudJVruHp3ZPO7g/mEKcziRbciQDo0IUwCjMiByAAbD
+AriYrSl+eEnJGhDbN35LxjkMpuO0hbTeYJKn33jdq8nsmrLfxcQC/itvvnr4VDw+
+crNvDsESEDKcGR1PWhaFs+/7NfxkG+bvDJZPvmB/G5+RKQKdZM127mfjAeZ0CVnh
+d5zc0q60+TJoRAOu4BGNK5wrBWz7uQ7mKPKxJoWCeUG7wkk/4RT3Hndn82RsACkU
+OXcdRePxSJIQAmIuoMHwNwpTw1g3K1P6yTHqh+/DRdM0dJMOV1tQXCmeJ4FIsBUD
+kW0I
+-----END CERTIFICATE-----
Added: qpid/proton/trunk/tests/proton_tests/ssl_db/client-private-key.pem
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/ssl_db/client-private-key.pem?rev=1395720&view=auto
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/ssl_db/client-private-key.pem (added)
+++ qpid/proton/trunk/tests/proton_tests/ssl_db/client-private-key.pem Mon Oct
8 18:51:19 2012
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIUWSp/twvXiECAggA
+MBQGCCqGSIb3DQMHBAh47wRU8PebagSCBMg3be4KI+3fp5UYQtZEFpq/MzfeFg9O
+22xk0DsSik8BgNM+LoaUJbMUS8yc/OO2j/MXnPU6uNudCxPdew0uZO5lt1Pgx0hY
+Kr83rb1rHZx6zA4yQ6topI6bSd2q5puqwInMU1GSLMIvn459k8O9GkV3IfOIJ0NQ
+SbPfPmloi2COT9lWjcp/MVrKy8/WqghjFARE0O7qgZMcViJwyA6fY9SH6acTFVvm
+7AD48qiet7iXH7ZqzEvhbSJLnk5YCWnfNzQ+syMrClTd/HDVLDdI0M42OoUrNbFJ
+gWthJPa1JGuq2lUePsAfDxCvU7E1ORmpN/KNlf5Nbyu8fydnM7eVRy/yUm/vV1pl
+DCrR1JJ6UDftO4Jdp7hg2pUT4GbiftosJbcbCf4M4bXB7bAc634j2jiNym/kiMfW
+zGZmiiOgU6J931/qK+nGkoeLi7HDFiTABybwddmR94UjFn4ya1dEeUDpjPBNmtWg
+q963JidWkvf2f7SXxosoY/Aadq2boZjYKiJ1QOTFbBeGnmmjk3Tk+AVzf1ZuvRKq
+n7JJNClD2rfy81NMTpos65praXzq8J/ICT0s28ksefHFhsacqvQEvnivMMEwVtgB
+NnSygkjR694MINtlGpvt78JKz78CArnBlhoXiYSFKHwvpt4GlyzG2cyaWrLRyDXB
+A+CeJGH5o1hAM/i2XeOeo+ytWgqEZIAPyqTb4SDsLfyJk7Hc0mkpAjzBnv1XfraB
+7HdcDWJZzTVyXveJlb5kTmzUOWlsovK5QiQCgTCf32LXf8ncmN3rSJHgPstRU/Gj
+A4XNGZdC3NJeFyVMEEKDZtzEu9CMBY/vMMZn/Uj26T6vZ8uvTo1zSMLtdQvqb30n
+l+ergmXAGjFRb35+2F5bs0LLfmmqNqM2uom5RIj0r7CmPwmT8SyKY7oubSwn7evn
+VQlcnXy8jgkricH4LHKuKkH9HP9FWM/AgPgYFAZlFJ4W+KQxQfJlIpPI7BzSz2uO
+oF81H0O2g8ZmNbNXph6v4HrSGvavirOwmxX3bUl+vZTbJK8N3dciF5FlmVGzZxJ1
+kpVKqIlmqS0EKQgB3s/n4sv6xukAz+2AZCvl0ZCI9DIWtIDRvSYRJ1BhuaR0piWO
+M+pY2CIKgpms4u7rBm7vgNlnPwijawc+eDh5jNivRjlpHbTWCphxk6rCPDmFdhEI
+/FdWtbJlaQw3BbpdzeP1HX0gSYVyOBZ8JnCVZiuXBH+3K6OWWgvs9nNY0nkojwBq
+XHLH1PdPe9OrVUxGukL2CMsDuyqy0XZYajXJZUhILWNQ8AHPibr2VwF2yCcub2zN
+Zn6M2wO+BM2W94HQqzswMpQZbrqw2aa4hngTZ8k0hyYzGJrFyMYXoCPaH2mg3Q0Z
+FGo6qteQ6nr58816WHI7Tb9Ot2MSgwHVhWTEHh8ufT92DWJh0gN1C8scwOrw+320
+4Qc51d8ntEsuETRFJYOmny9ef+fpLc+DNsPTrwJ+WWkisLrIEUnf3CV9HcqXfRMx
+n2TtWx4v8Qa0uYjTQHpbnESSKxOYugUPocsm0DY0lkyS92RSsfWD74dL/HjDTGOu
+XvvA8kERXyrkdXc1F+jSIXVX+ZoZOE1o2F4YcDqWtqdjfq8RNoBS6n81Uu9YMjUB
++aY=
+-----END ENCRYPTED PRIVATE KEY-----
Added: qpid/proton/trunk/tests/proton_tests/ssl_db/server-certificate.pem
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/ssl_db/server-certificate.pem?rev=1395720&view=auto
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/ssl_db/server-certificate.pem (added)
+++ qpid/proton/trunk/tests/proton_tests/ssl_db/server-certificate.pem Mon Oct
8 18:51:19 2012
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIICzzCCAbcCCQDmi9rco1HVJTANBgkqhkiG9w0BAQUFADAsMRYwFAYDVQQKDA1U
+cnVzdCBNZSwgSW5jMRIwEAYDVQQDDAkxMjcuMC4wLjEwIBcNMTIxMDA4MTgxODI1
+WhgPMjI4NjA3MjMxODE4MjVaMCUxDzANBgNVBAoMBlNlcnZlcjESMBAGA1UEAwwJ
+MTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyNAx6WCK
+HowDAMNhDeP3RX2I3I/ffUj10fDEZcyaWC+nbDcCxdI7ahRZ1yAzYMZ+WYq+J4W5
+rPpPyXjPdm3RGHXMju+9D4gLQRQutQQuqB0TUJ8CZbbU7RXLFBKvU3Qu+EvwCB6d
+N3nf5Jvp67tRXyvKJ8Thv6yYHrXj0ASjpMYYxEQNnTXxjxeqTKBwKQUH/yp4+ypT
+P3TFm7X6qwNJmilpvb/UqXmle2aG+dTCjFuQJZMReU61AquejwKMY2vxvxQZeOG6
+8YNdGLqMXpQhm5NWNcX6SFPeqVn6gtje/pxIfsIgZ7u9fhKEFe5tpb3gWQkyC2DL
+24l7br81ECCAMwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCj21mSdzCfDyRK0kLN
+kgAZ3zLMBkCyh2AgdhqWymU3wJp438HNn6SWhB2hZM8A421wmV1mZOl8cN5NFXZv
+9UofoVRunVU0w+AKI++LaEUTS5nrSx9p/8pw0J/thWs372+zSt9QlBPL9735mQ1f
+owUZgHdfpXJVgfImz6BrWg1tq07iNpWByL5bnyBmqmEzfCGUB7Q3Hye1G9PoG6V3
+jBiTyMCXOR9+T9zaCzpMyO9tvcuc9P/SkZAWb97zciTfmOQ8uJwSoM+cf+xk2ja1
+hWb9UhWb+STaAhI76wifw3R3tmo3qsb8u6xzcXSLuSqxLEB8/HyWhmouyXiTVkbz
+oSvO
+-----END CERTIFICATE-----
Added: qpid/proton/trunk/tests/proton_tests/ssl_db/server-private-key.pem
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/ssl_db/server-private-key.pem?rev=1395720&view=auto
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/ssl_db/server-private-key.pem (added)
+++ qpid/proton/trunk/tests/proton_tests/ssl_db/server-private-key.pem Mon Oct
8 18:51:19 2012
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIW5BfnJy9jxoCAggA
+MBQGCCqGSIb3DQMHBAicwXAkfsyDhASCBMjWD3uSrvyIhh6sKWj/poHy2zDXA5Fg
+FmjOZ5AbUp5JaGo2vNcayFToZ40Rl7Dtzpirq+veh7ESNnRE7JLlY2NxHgvLPpQq
+jaBuDN4GTTiibxOdRiHc8t90GDRN/xcYQK01EHBgC1qGjM4lM+NXY7NUZDcIiBrP
+Fb3qP+uAlkJHMMUn3gpr7N1pC3cOOhJ40VjAXZ6d0zmoCst5gTQxKSYPT/aSoJG1
+mdAB+RF4T0yZOYDcYZZLgRhGH1Ax3upEw513KaJti7B1fr6OCnv2otYuH6PPVn7K
+Td4I28Jevp7MVRbTyMiFVfjEHb1IL26MLC0iKcYcT25wXUcAI/iYa5drzAJuLRZD
+DX74I2+hzAqu+xH7+J/ehnl+CrWuue7C94fWtWidPIROJQhVCG5dXo0pi24+Qzlc
+tZB9ID0Oxq12EbCZrKQTKmeETOamVKtS7PQ/xIia7QlSjY1WTLxKC2Yfn6qoCCLy
+NjvQnxpIirfqh8gA9al1V9qZ3hFmuxICWyf+W2yO8b5DQdl5/kCBSxg/xxBZmffO
+D4aUrmQoNp6/k1s6HftljuIcb7JYUFEqEdBk0xAl1jsq1TwoaK0XYCrAInXkJ40s
+3HdRWgyKdOz7Lv+nyMxROECihEWR6ipN4/6KLqvt696tfNNgkTKHzHKHH26ijuzm
+jlQNzsBrou2Rhel2ubcHLcs7HhYlXD5Rt601yx/zWksrfy2lQvPV3MaCSAE2XL9r
+Tt98mf/E3cXPiPrMEs8x9eghXdckigscP4fAas2LYCiwhXOKCTnik+vFqeiRH2M7
+kQJKtGzVKqcPs4LVU67H6DxYRTyffOBjdaoRu1+2sOnYVZRqWJG9VhpYQWzL/7wj
+Ux9uUb1Fgu8Q9BMtrdHi9D3ZhcvZF6yP2ormlkjD+PnZvBSIWc+Y4TCdDUBpOPt5
+CSKSIClBO2Q7/UetVOWh1GFwOUKy3/0mVMKAGOX0I5kUE38A2ZhMD19zQEy/u0/v
+H4F/wZ91yyvMR29T2KShDXjWcmDlcjtNA4ddsUDWw3Rliex284biT1FY4nqZkglt
+xeAPUqe+kNrkuWU8idulsEkmooRV5y2PqhTYs5P7HF7+FMg4uUNmiSRqJ7F05fLD
+dWVaJ2AdlMP5Lkl4R7j3iT63Nlsv5sTp0gaHFWjG/3l8ze3YzSHHqB52GL0kzF1F
++/xh19Y2dFaJu1mceBrTYLTviRG0SdRXll6TsBOqfUnIo4QbxC+sqVacq8Z9AoDI
+2/vw9N80KW/rRYGDM4g5nLr9nHNXAzWiaxk6mvon2zvYIObzd5tpNVfQDnjooGj+
+Z9nWLOWc75ElUkaF6Qd4ZlWQz8N8WYU+0JRs3MIhIqvdgyupUNsXH+YrSuKYEQsN
+oT9LDYlHH72xk2HJLZeCTpZlW7aMWkI0ybSKsWOzDPLvMYENzKjKyZi9uysbgaiJ
+M2QFA0EtixQbSc1RySDiX60neM4hQxV/55AOVk1mUGJLH3NbDrO39PqPrUHgY5Wa
+aQeNOk6HbcymOmv7urqmnGDmR5m8qv0UWjvklNHUCS0pzAXZQaYBcJOWrx8O33Kc
+5sQTdiLA0G8+hMgF4xotqkm1wBNSQcRl5wGnEj92ZjPN2TfnpyOjiJl9rnhMeDCS
+IXQ=
+-----END ENCRYPTED PRIVATE KEY-----
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]