Skip to content

Commit 091c14d

Browse files
authored
Merge pull request #4 from pytest-dev/update-certificate/1/dev
Update certificate and instructions to generate it
2 parents bd6b11a + c38690d commit 091c14d

File tree

3 files changed

+120
-133
lines changed

3 files changed

+120
-133
lines changed

pytest_localserver/ca.crt

Lines changed: 0 additions & 36 deletions
This file was deleted.

pytest_localserver/https.py

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,19 @@ class SecureContentServer (ContentServer):
3333
3434
If you want to create your own server certificate, you need `OpenSSL`_
3535
installed on your machine. A self-signed certificate consists of a
36-
certificate and a private key for your server. It can be created with the
37-
following command::
38-
39-
openssl req -new -x509 -keyout server.pem -out server.pem -nodes
36+
certificate and a private key for your server. It can be created with
37+
a command like this, using OpenSSL 1.1.1::
38+
39+
openssl req \
40+
-x509 \
41+
-newkey rsa:4096 \
42+
-sha256 \
43+
-days 3650 \
44+
-nodes \
45+
-keyout server.pem \
46+
-out server.pem \
47+
-subj "/CN=127.0.0.1/O=pytest-localserver/OU=Testing Dept." \
48+
-addext "subjectAltName=DNS:localhost"
4049
4150
Note that both key and certificate are in a single file now named
4251
``server.pem``.
@@ -47,28 +56,39 @@ class SecureContentServer (ContentServer):
4756
Generate a server key and request for signing (csr). Make sure that the
4857
common name (CN) is your IP address/domain name (e.g. ``localhost``). ::
4958
50-
openssl genrsa -des3 -out server.key 4096
51-
openssl req -new -key server.key -out server.csr
59+
openssl genpkey \
60+
-algorithm RSA \
61+
-pkeyopt rsa_keygen_bits:4096 \
62+
-out server.key
63+
openssl req \
64+
-new \
65+
-addext "subjectAltName=DNS:localhost" \
66+
-key server.key \
67+
-out server.csr
5268
5369
Generate your own CA. Make sure that this time the CN is *not* your IP
5470
address/domain name (e.g. ``localhost CA``). ::
5571
56-
openssl genrsa -des3 -out ca.key 4096
57-
openssl req -new -x509 -key ca.key -out ca.crt
72+
openssl genpkey \
73+
-algorithm RSA \
74+
-pkeyopt rsa_keygen_bits:4096 \
75+
-aes256 \
76+
-out ca.key
77+
openssl req \
78+
-new \
79+
-x509 \
80+
-key ca.key \
81+
-out ca.crt
5882
5983
Sign the certificate signing request (csr) with the self-created CA that
60-
you made earlier. If you issue subsequent certificates and your browser
61-
already knows about previous ones simply increment the serial number. ::
84+
you made earlier. Note that OpenSSL does not copy the subjectAltName field
85+
from the request (csr), so you have to provide it again as a file. If you
86+
issue subsequent certificates and your browser already knows about previous
87+
ones simply increment the serial number. ::
6288
89+
echo "subjectAltName=DNS:localhost" >server-extensions.txt
6390
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
64-
-set_serial 01 -out server.crt
65-
66-
Make a server.key which doesn't cause HTTPSServer to prompt for a
67-
password::
68-
69-
openssl rsa -in server.key -out server.key.insecure
70-
mv server.key server.key.secure
71-
mv server.key.insecure server.key
91+
-set_serial 01 -extfile server-extensions.txt -out server.crt
7292
7393
Create a single file for both key and certificate::
7494

pytest_localserver/server.pem

Lines changed: 82 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,84 @@
1-
-----BEGIN RSA PRIVATE KEY-----
2-
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
51-
-----END RSA PRIVATE KEY-----
1+
-----BEGIN PRIVATE KEY-----
2+
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
51+
apeiobcSY1vsX7eM8mQkM8TxrDLyNjtl
52+
-----END PRIVATE KEY-----
5253
-----BEGIN CERTIFICATE-----
53-
MIIFODCCAyACAQEwDQYJKoZIhvcNAQEFBQAwezEbMBkGA1UEChMScHl0ZXN0LWxv
54-
Y2Fsc2VydmVyMSQwIgYDVQQLExtDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgRGVwdC4x
55-
FTATBgNVBAMTDGxvY2FsaG9zdCBDQTEfMB0GCSqGSIb3DQEJARYQYmFzdGlAcmVk
56-
dG9hZC5kZTAeFw0xMTA1MDcxNjEzMzFaFw0xMTA2MDYxNjEzMzFaMEkxGzAZBgNV
57-
BAoTEnB5dGVzdC1sb2NhbHNlcnZlcjEWMBQGA1UECxMNVGVzdGluZyBEZXB0LjES
58-
MBAGA1UEAxMJMTI3LjAuMC4xMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
59-
AgEA0phLUETPqoTk32D857Cg1HHtpp07IR34uz5/Vnw+5HNG+51uLQCrRktVySyf
60-
DGhJTVTv+Ysx3+g4Fq0uU/sYvaZSoZSziH7LetoWpYuU34QAMFTg8Pk7Tli1axUJ
61-
z0G5pO6ClUf9i25pFS8/lbk335d4MGc6w//+pthpuhzan8PaufP1DOVQPIcvrsDj
62-
ZI1/yb0zBKTYKPaRGoTrM2lgX3BKVApSAq1fL8NYzBx9vR3Fwo/5sRPRWl9BpQNx
63-
v6zDYV2CtrfK9D1opxZulTi45r0aPcVqY1tY79ZdXoO+0dVVJSnEWH3RmCDKS229
64-
Sg6wTZp+qIHw8WTkAXxX7Wg7wHp5l7Ml7gnoM00pzEvk1ZwPnzyXai0R3ADhhmJx
65-
3nDUNx+3QmQ+miFD1brn1W+oUf//Wylx2zP5numWVrXuwvPoHUezdJwHXpIAYxBy
66-
G8RhER/OB7J45lFgwQPEYpkATP3LMZNc19K6jqp70HTgW+3ICTWCIX+5zyOGDLPJ
67-
nxmmGM5pNuy/s5k4Ojf7+k39fxGwUEZvQ2otlj7lKddBYwjcyQegQ9d25ubiHPGa
68-
FlAJG1PdUPumulsPto3Kf74d88SXDIjXq9DemVETlUk/hCB0ohNxr3tKFNNS0rOd
69-
5VPzqPowbIszJmnPQ7FWNFm8BVNE7bIMq0e3KFhfqB/SgCsCAwEAATANBgkqhkiG
70-
9w0BAQUFAAOCAgEAp3xwZXaNh0tfik23CJ41joRp4Nr8Ud5qaGTZlwseHrxl6Fhr
71-
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
83+
r5rc71nFLay/H2CbOYELI+20VFMp8GF3kOZbkRA=
8184
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)