Rev 2940: Ssl files needed for the test https server. in file:///v/home/vila/src/bzr/experimental/https/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Sat Nov 24 14:21:00 GMT 2007
At file:///v/home/vila/src/bzr/experimental/https/
------------------------------------------------------------
revno: 2940
revision-id:v.ladeuil+lp at free.fr-20071124142059-2114qtsgfdv8g9p1
parent: v.ladeuil+lp at free.fr-20071122103556-djp1gm22n2npztk0
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: https
timestamp: Sat 2007-11-24 15:20:59 +0100
message:
Ssl files needed for the test https server.
* bzrlib/tests/ssl_certs/create_ssls.py:
Script to create the ssl keys and certificates.
* bzrlib/tests/ssl_certs/server.crt:
Server certificate signed by the certificate authority.
* bzrlib/tests/ssl_certs/server.csr:
Server certificate signing request.
* bzrlib/tests/ssl_certs/server_without_pass.key:
Server key usable without password.
* bzrlib/tests/ssl_certs/server_with_pass.key:
Server key.
* bzrlib/tests/ssl_certs/ca.key:
Certificate authority private key.
* bzrlib/tests/ssl_certs/ca.crt:
Certificate authority certificate.
* bzrlib/tests/ssl_certs/__init__.py:
Provide access to ssl files (keys and certificates).
added:
bzrlib/tests/ssl_certs/ ssl_certs-20071124141654-dc9za9nho2gmzbri-1
bzrlib/tests/ssl_certs/__init__.py __init__.py-20071124141703-j5hr254lm287lyut-8
bzrlib/tests/ssl_certs/ca.crt ca.crt-20071124141703-j5hr254lm287lyut-7
bzrlib/tests/ssl_certs/ca.key ca.key-20071124141703-j5hr254lm287lyut-6
bzrlib/tests/ssl_certs/create_ssls.py create_ssls.py-20071124141703-j5hr254lm287lyut-5
bzrlib/tests/ssl_certs/server.crt server.crt-20071124141703-j5hr254lm287lyut-4
bzrlib/tests/ssl_certs/server.csr server.csr-20071124141703-j5hr254lm287lyut-3
bzrlib/tests/ssl_certs/server_with_pass.key server_with_pass.key-20071124141703-j5hr254lm287lyut-2
bzrlib/tests/ssl_certs/server_without_pass.key server_without_pass.-20071124141703-j5hr254lm287lyut-1
-------------- next part --------------
=== added directory 'bzrlib/tests/ssl_certs'
=== added file 'bzrlib/tests/ssl_certs/__init__.py'
--- a/bzrlib/tests/ssl_certs/__init__.py 1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/ssl_certs/__init__.py 2007-11-24 14:20:59 +0000
@@ -0,0 +1,30 @@
+#! /usr/bin/env python
+
+# Copyright (C) 2007 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""ssl_certs -- provides access to ssl keys and certificates needed by tests"""
+
+from bzrlib import (
+ osutils,
+ )
+
+# Directory containing all ssl files, keys or certificates
+base_dir = osutils.dirname(osutils.realpath(__file__))
+
+def build_path(name):
+ """Build and return a path in ssl_certs directory for name"""
+ return osutils.pathjoin(base_dir, name)
=== added file 'bzrlib/tests/ssl_certs/ca.crt'
--- a/bzrlib/tests/ssl_certs/ca.crt 1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/ssl_certs/ca.crt 2007-11-24 14:20:59 +0000
@@ -0,0 +1,38 @@
+-----BEGIN CERTIFICATE-----
+MIIGpzCCBI+gAwIBAgIJAIQJULJz3BHOMA0GCSqGSIb3DQEBBQUAMIGTMQswCQYD
+VQQGEwJCWjERMA8GA1UECBMISW50ZXJuZXQxDzANBgNVBAcTBkJhemFhcjEUMBIG
+A1UEChMLRGlzdHJpYnV0ZWQxDDAKBgNVBAsTA1ZDUzEfMB0GA1UEAxMWTWFzdGVy
+IGZvIGNlcnRpZmljYXRlczEbMBkGCSqGSIb3DQEJARYMY2VydEBuby5zcGFtMB4X
+DTA3MTEyMjE3MDUwM1oXDTE3MTExOTE3MDUwM1owgZMxCzAJBgNVBAYTAkJaMREw
+DwYDVQQIEwhJbnRlcm5ldDEPMA0GA1UEBxMGQmF6YWFyMRQwEgYDVQQKEwtEaXN0
+cmlidXRlZDEMMAoGA1UECxMDVkNTMR8wHQYDVQQDExZNYXN0ZXIgZm8gY2VydGlm
+aWNhdGVzMRswGQYJKoZIhvcNAQkBFgxjZXJ0QG5vLnNwYW0wggIiMA0GCSqGSIb3
+DQEBAQUAA4ICDwAwggIKAoICAQC7I+r4QCQ71jBmAdlF5wu0097oXeO7gC1+PPhI
+/k3z5AbImNyzS2CSg/elL4aabvO6zC9iFj/AMQ5x7Ioj9vss/4HPKaMh5ylZmEj4
+s1nlAGl0nAHkQ6UQAAP2Lpnnw9kQ/wpJbPtijcZukMvECO5CsRZwq0Q857qHLn6M
+okl3Mnbl6u98Gtr7q8tt5Esq68vuK1FMOKZ2K9owbtBLuNHBbof0o0jOyt6QfdGH
+O+rnM99bu9z+GrcV8+ODPkUFueNlR88mXsbMIn1hD1/HEQCu1JpSBklO4vvRAZ1w
+wTee8kMJimJz9AFVCEF3D1Ss7bX1ZQflgK5x32L/JHiLFvt8l2y0l8Yi9L4sHS7B
+IM082WBaHf6bToC/Wg7dx4oTSGibg0XS93+NKhzlNrA0UHah0Ea1kGY3pCiUPQuL
+cgwWgJVJEmWx/FIAt627Ei4ex7jjhXr/JDfKL7pLR5qCr4hBJb4AeoyRcYINj5Y2
+a0o8omF+3+JVJitxkgFaC0KjPWyAljU2wqKjGfdKGvjwJmVx5TTPhKLV4kytDbOQ
+bNXw1oB6iMOnDByJRK/ecr1cXKxPvtsKjMmXGgsqoyhqd2j4mEWDmHou+K4Kr2KW
+PGfq3Zy6ev3wgu2zUDv4g7ATXHe+WBLUGk3G+luWo1hJB+rz2xibfU4q13uZ2Vw/
+D8xznwIDAQABo4H7MIH4MB0GA1UdDgQWBBQEv3DeM2aacvDmXkkEzaY6hPYaiDCB
+yAYDVR0jBIHAMIG9gBQEv3DeM2aacvDmXkkEzaY6hPYaiKGBmaSBljCBkzELMAkG
+A1UEBhMCQloxETAPBgNVBAgTCEludGVybmV0MQ8wDQYDVQQHEwZCYXphYXIxFDAS
+BgNVBAoTC0Rpc3RyaWJ1dGVkMQwwCgYDVQQLEwNWQ1MxHzAdBgNVBAMTFk1hc3Rl
+ciBmbyBjZXJ0aWZpY2F0ZXMxGzAZBgkqhkiG9w0BCQEWDGNlcnRAbm8uc3BhbYIJ
+AIQJULJz3BHOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggIBAKHe4Cej
+6MQbC6Ue9+zpGJWSDL0fwUKCgtQEVdO5TvTlb5GYVRnuRTGJdwVUkQOg+qg7qD9i
+EF2fM8VRdsjqwmXOb7rGOm4NCtjtox+91xVPIqby+29qxKT6CE9VQy1usR+7sxrZ
+PkyTdrtWj1zXt2/btxVQtULhR7nuI4ryv1ad9ip3b045L+nV6qq8QGBQLe+vAC/f
+GH6EWqOE2Xq3TzGG9QJyXjcB/MJ8rjTiztJIohJDkUssd4CfmKRJ4PFhW3fP3JIN
++1Jn5HNZeq6DiBqwRFiPEVK9tRpsttNYVrh5WV59v27xsT/nxwchBgYTn5vVoX5H
+K6PYo1qoM7adcBcDSyChxBqmA7P7sUeVF3xntI5caNHG8QA/uQDeyIl21WJcH8Vq
+OoesFTfxGJtXuAwrCWKbjA+wtG9dR0drvFYao1R6keyAg70FLTMyQf9rCl7NgNB/
+pVcJY0H+KNC3LCTf0LBtFodnfkHrknCM9LyNtr8qqZTpRiXGpPRifq4v6raoLvq0
+byiGzZQOaN34Ylr2NFThCo64FFtMcy/B5+LIlUHR/rkhBnMI+rx8BH8hRoCUHlTh
+tyfzADLCG0ooAtDQQ/8p3+LcTAWe5LjsrnTzUXuY5Ztnn6kycYVvDY4DuYcjyZ4V
+ugmEExX77wXRCp7i0kVuuO8Ki9cQks4AIksq
+-----END CERTIFICATE-----
=== added file 'bzrlib/tests/ssl_certs/ca.key'
--- a/bzrlib/tests/ssl_certs/ca.key 1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/ssl_certs/ca.key 2007-11-24 14:20:59 +0000
@@ -0,0 +1,54 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: DES-EDE3-CBC,443927423E39C427
+
+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
+-----END RSA PRIVATE KEY-----
=== added file 'bzrlib/tests/ssl_certs/create_ssls.py'
--- a/bzrlib/tests/ssl_certs/create_ssls.py 1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/ssl_certs/create_ssls.py 2007-11-24 14:20:59 +0000
@@ -0,0 +1,259 @@
+#! /usr/bin/env python
+
+# Copyright (C) 2007 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""create_ssls.py -- create sll keys and certificates for tests.
+
+The https server requires at least a key and a certificate to start.
+
+SSL keys and certificates are created with openssl which may not be available
+everywhere we want to run the test suite.
+
+To simplify test writing, the necessary keys and certificates are generated by
+this script and used by the tests.
+
+Since creating these test keys and certificates requires a good knowledge of
+openssl and a lot of typing, we record all the needed parameters here.
+
+Since this will be used rarely, no effort has been made to handle exotic
+errors, the basic policy is that openssl should be available in the path and
+the parameters should be correct, any error will abort the script. Feel free to
+enhance that.
+
+This script provides options for building any individual files or two options
+to build the certificate authority files (--ca) or the server files (--server).
+"""
+
+from cStringIO import StringIO
+import optparse
+import os
+from subprocess import (
+ CalledProcessError,
+ Popen,
+ PIPE,
+ )
+
+from bzrlib import (
+ osutils,
+ )
+from bzrlib.tests import (
+ ssl_certs,
+ )
+
+def error(s):
+ print s
+ exit(1)
+
+def needs(request, *paths):
+ """Errors out if the specified path does not exists"""
+ missing = [p for p in paths if not os.path.exists(p)]
+ if missing:
+ error('%s needs: %s' % (request, ','.join(missing)))
+
+
+def rm_f(path):
+ """rm -f path"""
+ try:
+ os.unlink(path)
+ except:
+ pass
+
+def _openssl(args, input=None):
+ """Execute a command in a subproces feeding stdin with the provided input.
+
+ :return: (returncode, stdout, stderr)
+ """
+ cmd = ['openssl'] + args
+ proc = Popen(cmd, stdin=PIPE)
+ (stdout, stderr) = proc.communicate(input)
+ if proc.returncode:
+ # Basic error handling, all commands should succeed
+ raise CalledProcessError(proc.returncode, cmd)
+ return proc.returncode, stdout, stderr
+
+
+ssl_params=dict(
+ # Passwords
+ server_pass='I will protect the communications',
+ server_challenge_pass='Challenge for the CA',
+ ca_pass='I am the authority for the whole... localhost',
+ # CA identity
+ ca_country_code='BZ',
+ ca_state='Internet',
+ ca_locality='Bazaar',
+ ca_organization='Distributed',
+ ca_section='VCS',
+ ca_name='Master fo certificates',
+ ca_email='cert at no.spam',
+ # Server identity
+ server_country_code='LH',
+ server_state='Internet',
+ server_locality='LocalHost',
+ server_organization='Testing Ltd',
+ server_section='https server',
+ server_name='127.0.0.1', # Always accessed under that name
+ server_email='https_server at locahost',
+ server_optional_company_name='',
+ )
+
+
+def build_ca_key():
+ """Generate an ssl certificate authority private key."""
+ key_path = ssl_certs.build_path('ca.key')
+ rm_f(key_path)
+ _openssl(['genrsa', '-passout', 'stdin', '-des3', '-out', key_path, '4096'],
+ '%(ca_pass)s\n%(ca_pass)s\n' % ssl_params)
+
+
+def build_ca_certificate():
+ """Generate an ssl certificate authority private key."""
+ key_path = ssl_certs.build_path('ca.key')
+ needs('Building ca.crt', key_path)
+ cert_path = ssl_certs.build_path('ca.crt')
+ rm_f(cert_path)
+ _openssl(['req', '-passin', 'stdin', '-new', '-x509',
+ # Will need to be generated again in 10 years -- vila 20071122
+ '-days', '3650',
+ '-key', key_path, '-out', cert_path],
+ '%(ca_pass)s\n'
+ '%(ca_country_code)s\n'
+ '%(ca_state)s\n'
+ '%(ca_locality)s\n'
+ '%(ca_organization)s\n'
+ '%(ca_section)s\n'
+ '%(ca_name)s\n'
+ '%(ca_email)s\n'
+ % ssl_params)
+
+
+def build_server_key():
+ """Generate an ssl server private key.
+
+ We generates a key with a password and then copy it without password so
+ that as server can user it without prompting.
+ """
+ key_path = ssl_certs.build_path('server_with_pass.key')
+ rm_f(key_path)
+ _openssl(['genrsa', '-passout', 'stdin', '-des3', '-out', key_path, '4096'],
+ '%(server_pass)s\n%(server_pass)s\n' % ssl_params)
+
+ key_nopass_path = ssl_certs.build_path('server_without_pass.key')
+ rm_f(key_nopass_path)
+ _openssl(['rsa', '-passin', 'stdin', '-in', key_path,
+ '-out', key_nopass_path,],
+ '%(server_pass)s\n' % ssl_params)
+
+
+def build_server_signing_request():
+ """Create a CSR (certificate signing request) to get signed by the CA"""
+ key_path = ssl_certs.build_path('server_with_pass.key')
+ needs('Building server.csr', key_path)
+ server_csr_path = ssl_certs.build_path('server.csr')
+ rm_f(server_csr_path)
+ _openssl(['req', '-passin', 'stdin', '-new', '-key', key_path,
+ '-out', server_csr_path],
+ '%(server_pass)s\n'
+ '%(server_country_code)s\n'
+ '%(server_state)s\n'
+ '%(server_locality)s\n'
+ '%(server_organization)s\n'
+ '%(server_section)s\n'
+ '%(server_name)s\n'
+ '%(server_email)s\n'
+ '%(server_challenge_pass)s\n'
+ '%(server_optional_company_name)s\n'
+ % ssl_params)
+
+
+def sign_server_certificate():
+ """CA signs server csr"""
+ server_csr_path = ssl_certs.build_path('server.csr')
+ ca_cert_path = ssl_certs.build_path('ca.crt')
+ ca_key_path = ssl_certs.build_path('ca.key')
+ needs('Signing server.crt', server_csr_path, ca_cert_path, ca_key_path)
+ server_cert_path = ssl_certs.build_path('server.crt')
+ rm_f(server_cert_path)
+ _openssl(['x509', '-req', '-passin', 'stdin',
+ # Will need to be generated again in 10 years -- vila 20071122
+ '-days', '3650',
+ '-in', server_csr_path,
+ '-CA', ca_cert_path, '-CAkey', ca_key_path,
+ '-set_serial', '01',
+ '-out', server_cert_path,],
+ '%(ca_pass)s\n' % ssl_params)
+
+
+def build_ssls(name, options, builders):
+ if options is not None:
+ for item in options:
+ builder = builders.get(item, None)
+ if builder is None:
+ error('%s is not a known %s' % (item, name))
+ builder()
+
+
+opt_parser = optparse.OptionParser(usage="usage: %prog [options]")
+opt_parser.set_defaults(ca=False)
+opt_parser.set_defaults(server=False)
+opt_parser.add_option(
+ "--ca", dest="ca", action="store_true",
+ help="Generate CA key and certificate")
+opt_parser.add_option(
+ "--server", dest="server", action="store_true",
+ help="Generate server key, certificate signing request and certificate")
+opt_parser.add_option(
+ "-k", "--key", dest="keys", action="append", metavar="KEY",
+ help="generate a new KEY (several -k options can be specified)")
+opt_parser.add_option(
+ "-c", "--certificate", dest="certificates", action="append",
+ metavar="CERTIFICATE",
+ help="generate a new CERTIFICATE (several -c options can be specified)")
+opt_parser.add_option(
+ "-r", "--sign-request", dest="signing_requests", action="append",
+ metavar="REQUEST",
+ help="generate a new signing REQUEST (several -r options can be specified)")
+opt_parser.add_option(
+ "-s", "--sign", dest="signings", action="append",
+ metavar="SIGNING",
+ help="generate a new SIGNING (several -s options can be specified)")
+
+
+key_builders = dict(ca=build_ca_key, server=build_server_key,)
+certificate_builders = dict(ca=build_ca_certificate,)
+signing_request_builders = dict(server=build_server_signing_request,)
+signing_builders = dict(server=sign_server_certificate,)
+
+
+if __name__ == '__main__':
+ (Options, args) = opt_parser.parse_args()
+ if (Options.ca or Options.server):
+ if (Options.keys or Options.certificates or Options.signing_requests
+ or Options.signings):
+ error("--ca and --server can't be used with other options")
+ if Options.ca:
+ build_ca_key()
+ build_ca_certificate()
+ if Options.server:
+ build_server_key()
+ build_server_signing_request()
+ sign_server_certificate()
+ else:
+ build_ssls('key', Options.keys, key_builders)
+ build_ssls('certificate', Options.certificates, certificate_builders)
+ build_ssls('signing request', Options.signing_requests,
+ signing_request_builders)
+ build_ssls('signing', Options.signings, signing_builders)
=== added file 'bzrlib/tests/ssl_certs/server.crt'
--- a/bzrlib/tests/ssl_certs/server.crt 1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/ssl_certs/server.crt 2007-11-24 14:20:59 +0000
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4wCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkJaMREwDwYD
+VQQIEwhJbnRlcm5ldDEPMA0GA1UEBxMGQmF6YWFyMRQwEgYDVQQKEwtEaXN0cmli
+dXRlZDEMMAoGA1UECxMDVkNTMR8wHQYDVQQDExZNYXN0ZXIgZm8gY2VydGlmaWNh
+dGVzMRswGQYJKoZIhvcNAQkBFgxjZXJ0QG5vLnNwYW0wHhcNMDcxMTIyMTcwNTI2
+WhcNMTcxMTE5MTcwNTI2WjCBmzELMAkGA1UEBhMCTEgxETAPBgNVBAgTCEludGVy
+bmV0MRIwEAYDVQQHEwlMb2NhbEhvc3QxFDASBgNVBAoTC1Rlc3RpbmcgTHRkMRUw
+EwYDVQQLEwxodHRwcyBzZXJ2ZXIxEjAQBgNVBAMTCTEyNy4wLjAuMTEkMCIGCSqG
+SIb3DQEJARYVaHR0cHNfc2VydmVyQGxvY2Fob3N0MIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEAqYEQ0A2jc2irsU2pTGbjurNITK0M5w4cngpBYME9K7Q2
++AovmpuiaQCEG4rE8QD1spzA2YZm7YpnVYiKNzSOD+KDSxgc30rC88MA14e6Lbgp
+VHFqFPEBcKjMtQ/aaeR/6u3m1JXVW5KWBS7mtG9DOk8mxAyd9y3AfYOO64P5PQnm
+oZj5EApzHxhA5GJ042gfErrFUFYT//RLn4xlH8jqUON6q+e0qQe3q3Dv76Vu207y
+wIyUXs1KJIhIqpIjfyY/NyrohwmU8Ezz2UzECMzflJXWbqFr6eGKQKk9OraZKSYW
+eOmXoskgBXAkn9LWV3Pln1Td5Sa3GTz4nW8evzHt80HfHpmT/xxGp7pXAVRVhU7G
+kgOj4fbl5Aho4PTQLmzoGrzqINSrHsnBPHv9x+Kgb4KhevXBoh+S491Bq7wXMTfW
+T/BhViVpInZ0cxENhQ/MU+cno26mUOiyTXzdN3zcxMGVRzST/S56HJi9zRKxV4jM
+FGkz0MQgc/J8T03OIBRv15nKDGIh97PI40aXYpBlCzhegUdYeuHHCc+XC7y5qXk1
+RYtubXkebB0iTgL9IcBXN2JTJ2NzjEp+kNl+4P0DbTt5XYpSWAO1WtFTqBcjjHbo
+U+hF3Jobc0QG7JP5DvOgjgja6m2yJfixVGV3557q+WwH5aE1RMCW0qNCFwGNXYEC
+AwEAATANBgkqhkiG9w0BAQUFAAOCAgEAtwbp2iGuzrkKjNuQZlhxcHkE+VtBidVi
+JSEFAYsiE2Mko5rjc7ZOEavvySoOxEUssEwT/V0oWxTdpBu2FndHjXfg2B1VQNOk
+DlIyKqQzQzFjbe63IynFNM+Gqfu7ozfj5askWVGHG0bQq86fO1uOU0wgznTVZTZd
+EjSksawCeEMN67/lJSwZMhu43F/XvHfjtBXyKYGzmgtQcWWQhpCjWUuEZY1evl0a
+BVsrrhWR6QscmiMhyiuHnv2dmJbJHh2LVVNfD0KIgDh5fpZExlvcEn3iQKsJj0QS
+09JWFGGRucT7PT4OVHZMnqQR4CvkOkQmhX8u3sdmb/Eh/TWlPFlV5xASsg673Ct4
+RpsGRz6O9HmranEq+F9YO3O4YhsKAGmNGAXe7wAw5LlNQauIsx1+ABMyTpJe5QyV
+TQOczTLiaklUUeIakAiMI/S6UyIzKap7UeuK1yXu1jW/tCTy+QLIXF9MjyflDgYm
+cx4EmhsOdvy/Vf85s5ghY7XnerDHa1YoVHtWXCqDHdqRdxhiBFO8XRT9tI6rxuS2
+YYZ653Eubr+625zcDU/IbA9TGqJgGNy+vxvD3NBquGsKCg0XhtHXHRv4dHBFO5xW
+oihHorFJsXLTmwHQbR/QBDVjppDeOkYSv3byo6EzRAz+KcaF4ru+qlrVoqxWAXS3
+ySQb58Jnk60=
+-----END CERTIFICATE-----
=== added file 'bzrlib/tests/ssl_certs/server.csr'
--- a/bzrlib/tests/ssl_certs/server.csr 1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/ssl_certs/server.csr 2007-11-24 14:20:59 +0000
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIFBjCCAu4CAQAwgZsxCzAJBgNVBAYTAkxIMREwDwYDVQQIEwhJbnRlcm5ldDES
+MBAGA1UEBxMJTG9jYWxIb3N0MRQwEgYDVQQKEwtUZXN0aW5nIEx0ZDEVMBMGA1UE
+CxMMaHR0cHMgc2VydmVyMRIwEAYDVQQDEwkxMjcuMC4wLjExJDAiBgkqhkiG9w0B
+CQEWFWh0dHBzX3NlcnZlckBsb2NhaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAKmBENANo3Noq7FNqUxm47qzSEytDOcOHJ4KQWDBPSu0NvgKL5qb
+omkAhBuKxPEA9bKcwNmGZu2KZ1WIijc0jg/ig0sYHN9KwvPDANeHui24KVRxahTx
+AXCozLUP2mnkf+rt5tSV1VuSlgUu5rRvQzpPJsQMnfctwH2DjuuD+T0J5qGY+RAK
+cx8YQORidONoHxK6xVBWE//0S5+MZR/I6lDjeqvntKkHt6tw7++lbttO8sCMlF7N
+SiSISKqSI38mPzcq6IcJlPBM89lMxAjM35SV1m6ha+nhikCpPTq2mSkmFnjpl6LJ
+IAVwJJ/S1ldz5Z9U3eUmtxk8+J1vHr8x7fNB3x6Zk/8cRqe6VwFUVYVOxpIDo+H2
+5eQIaOD00C5s6Bq86iDUqx7JwTx7/cfioG+CoXr1waIfkuPdQau8FzE31k/wYVYl
+aSJ2dHMRDYUPzFPnJ6NuplDosk183Td83MTBlUc0k/0uehyYvc0SsVeIzBRpM9DE
+IHPyfE9NziAUb9eZygxiIfezyONGl2KQZQs4XoFHWHrhxwnPlwu8ual5NUWLbm15
+HmwdIk4C/SHAVzdiUydjc4xKfpDZfuD9A207eV2KUlgDtVrRU6gXI4x26FPoRdya
+G3NEBuyT+Q7zoI4I2uptsiX4sVRld+ee6vlsB+WhNUTAltKjQhcBjV2BAgMBAAGg
+JTAjBgkqhkiG9w0BCQcxFhMUQ2hhbGxlbmdlIGZvciB0aGUgQ0EwDQYJKoZIhvcN
+AQEFBQADggIBADJMUP9Yyq9Tu+MYxq5DqQpmwU3f5u0jsKcgR9qmq3/S2IrF8lci
+nrxH3y0BFjQrqqGo/YB5cItw8mfYux1by36MZfJDX1ayF9VTNq1f6zTW3z1Mn3wZ
+0UasVB3KgHcGkyARLpKl+Kcied7pwgGE291UOJrqe7ylN/MM4VQyba6uralhGuM6
+zcYaMnsyTE4S3QUsHLgNO8zGNVg7IV2JgB4eSHsqafyjptRR+vNNBBOJIEhCUvDk
+wbYsG3UG3W0C7rlow3PbgyETMgmJqOkP+03+I7CNF7gCOsUQ9zKyDqdtG2U8GiMo
+6Pc02Ef17C+gwsCUrd7an4IXN16IbRB/Rdv8TpE9tEgMbnBFUGoNzmeHS+QrJFmi
+ptONXUQ72WDorKhOW7armQKZHXzxF94uyQ9zgDNEsvY2DgpgocoGIj20Ap5BaiOi
+TZzHPG0U5Yxd1rmHaGANixIA1xc6pzsPGmAHjKAMQtd0BjJ3nYcO+GUFyliVnOpR
+5V/YFNnJAx+rfO1l6sj1C02y64Aozo5nNLsK3vSZOROO13CVsdvgLj2GQrFxSLbx
+sY5OETZ2fINkuWGwc1mlxD6zHEdkjN94konVQbCQJKyouyn2yiju2jE31vcZ0qeR
+XQNny25DEqkmOa5hzdac5X5EUOrMMWvbHKLJCf8/kqdM6mgGmfIn/vt9
+-----END CERTIFICATE REQUEST-----
=== added file 'bzrlib/tests/ssl_certs/server_with_pass.key'
--- a/bzrlib/tests/ssl_certs/server_with_pass.key 1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/ssl_certs/server_with_pass.key 2007-11-24 14:20:59 +0000
@@ -0,0 +1,54 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: DES-EDE3-CBC,224623428C53180E
+
+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
+-----END RSA PRIVATE KEY-----
=== added file 'bzrlib/tests/ssl_certs/server_without_pass.key'
--- a/bzrlib/tests/ssl_certs/server_without_pass.key 1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/ssl_certs/server_without_pass.key 2007-11-24 14:20:59 +0000
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
More information about the bazaar-commits
mailing list