Prepare Server Key
* See this post for details on how to setup a Certificate Authority (CA) using OpenSSL.
* Sample session
– commands
# Generate a new server key and cert signing request (CSR) in PEM format openssl req -newkey rsa:1024 -keyout apachekey.pem -keyform PEM -out apachecsr.pem -outform PEM # View CSR content openssl req -in apachecsr.pem -text -noout # Sign CSR openssl ca -in apachecsr.pem # Remove passphrase openssl rsa -in apachekey.pem -out apachekey_nopass.pem
– outputs
C:\OpenSSL\exampleca>openssl req -newkey rsa:1024 -keyout apachekey.pem -keyform PEM -out apachecsr.pem -outform P
EM
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
.............................++++++
....++++++
writing new private key to 'apachekey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Example CA []:sp.example.org
Virginia []:Virginia
US []:US
ca@exampleca.com []:
Root Certification Authority []:example.orgproblems making Certificate Request
^C
C:\OpenSSL\exampleca>openssl req -newkey rsa:1024 -keyout apachekey.pem -keyform PEM -out apachecsr.pem -outform P
EM
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
.................................................................................++++++
........++++++
writing new private key to 'apachekey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Example CA []:sp.example.org
Virginia []:Virginia
US []:US
ca@exampleca.com []:ca@example.org
Root Certification Authority []:example.org
C:\OpenSSL\exampleca>openssl req -in apachecsr.pem -text -noout
Certificate Request:
Data:
Version: 0 (0x0)
Subject: CN=sp.example.org, ST=Virginia, C=US/emailAddress=ca@example.org, O=example.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:c6:ce:2d:13:c8:f7:31:05:14:ad:34:ec:24:4c:
c7:19:9f:07:00:d1:a0:35:b9:89:a5:7e:83:67:2f:
dc:25:ac:67:ee:4c:5e:85:16:42:55:9a:cc:84:ef:
55:8e:3b:10:a4:46:64:8d:5d:e7:ff:27:c9:52:fa:
2e:fc:42:3e:b1:f8:26:5e:59:34:5a:bb:8d:2a:47:
7b:c0:6b:ec:02:8b:7e:82:aa:a8:03:d0:ac:15:56:
4c:6c:89:d0:b0:d9:b0:6e:39:94:ac:7c:ab:35:73:
3c:81:60:55:2c:49:4e:43:a6:33:af:83:8e:a1:0f:
a5:47:47:3b:31:08:14:12:b5
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: md5WithRSAEncryption
77:bb:2f:b2:be:01:dd:cc:5b:c9:78:fb:f1:12:69:69:40:99:
3d:91:91:a0:f2:23:35:3e:67:c0:1c:5e:c1:63:25:f0:25:85:
8d:9c:47:39:d7:80:56:14:b8:9d:79:73:46:26:19:44:49:a2:
4c:c9:50:75:95:4b:dc:bc:8a:2c:66:f0:3f:a4:22:26:32:11:
63:2d:ec:9a:f4:97:fb:c2:c6:43:97:10:07:ed:1e:39:d0:22:
45:33:c3:1a:9b:b1:6c:d9:26:46:6d:f6:55:b1:b1:6a:54:27:
01:73:b4:d8:c2:e0:43:90:6e:ea:80:34:48:0e:85:4d:a2:ca:
ee:97
C:\OpenSSL\exampleca>openssl ca -in apachecsr.pem
Using configuration from C:\OpenSSL\exampleca\openssl.conf
Loading 'screen' into random state - done
Enter pass phrase for C:/OpenSSL/exampleca/private/cakey.pem:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :PRINTABLE:'sp.example.org'
stateOrProvinceName :PRINTABLE:'Virginia'
countryName :PRINTABLE:'US'
emailAddress :IA5STRING:'ca@example.org'
organizationName :PRINTABLE:'example.org'
Certificate is to be certified until May 15 15:04:00 2012 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 2 (0x2)
Signature Algorithm: md5WithRSAEncryption
Issuer: CN=Example CA, ST=Virginia, C=US/emailAddress=ca@exampleca.com, O=Root Certification Authority
Validity
Not Before: May 16 15:04:00 2011 GMT
Not After : May 15 15:04:00 2012 GMT
Subject: CN=sp.example.org, ST=Virginia, C=US/emailAddress=ca@example.org, O=example.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:c6:ce:2d:13:c8:f7:31:05:14:ad:34:ec:24:4c:
c7:19:9f:07:00:d1:a0:35:b9:89:a5:7e:83:67:2f:
dc:25:ac:67:ee:4c:5e:85:16:42:55:9a:cc:84:ef:
55:8e:3b:10:a4:46:64:8d:5d:e7:ff:27:c9:52:fa:
2e:fc:42:3e:b1:f8:26:5e:59:34:5a:bb:8d:2a:47:
7b:c0:6b:ec:02:8b:7e:82:aa:a8:03:d0:ac:15:56:
4c:6c:89:d0:b0:d9:b0:6e:39:94:ac:7c:ab:35:73:
3c:81:60:55:2c:49:4e:43:a6:33:af:83:8e:a1:0f:
a5:47:47:3b:31:08:14:12:b5
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Signature Algorithm: md5WithRSAEncryption
97:13:b4:17:f1:d6:e5:29:8e:70:60:f8:b2:93:97:7e:ad:f6:
47:f4:16:07:d8:0c:48:62:55:d3:91:f9:ac:61:83:ec:c9:04:
a9:a1:56:09:5d:77:1a:e0:dc:1e:c1:d6:23:4c:84:e6:ac:2f:
53:99:7c:dc:c8:9f:22:8b:89:fb:ec:ed:6a:67:20:b2:8d:2d:
63:c1:bd:88:23:28:84:22:16:95:8a:78:a4:47:52:ac:34:0f:
0f:51:68:2d:4e:7a:fa:ab:52:31:ac:df:c0:fd:c6:c0:2f:cf:
9a:e3:5d:92:4c:7c:a2:14:28:aa:b5:b0:cb:7f:e1:4a:30:ad:
1a:2e:56:c9:eb:1e:b9:fb:be:39:16:4f:14:46:77:24:fe:74:
89:b2:b8:bc:38:71:e3:da:90:64:26:4f:49:fe:87:10:45:f8:
cb:e9:91:c5:6b:9d:ff:50:05:d7:d6:81:3c:6b:f1:07:e6:3c:
02:13:7e:81:0f:22:04:b6:d0:58:02:70:d0:44:c3:f0:f1:c9:
27:ce:0f:4c:c8:ec:f3:b4:02:a0:55:17:a3:33:64:2b:ba:56:
b7:da:23:6e:73:ab:fd:d5:9f:6e:68:e5:cd:da:fb:76:e7:6c:
59:ef:87:c4:89:b1:9e:ab:c5:31:25:70:b1:b8:1d:d0:3b:ec:
90:e5:59:c0
-----BEGIN CERTIFICATE-----
MIIC7zCCAdegAwIBAgIBAjANBgkqhkiG9w0BAQQFADB9MRMwEQYDVQQDEwpFeGFt
cGxlIENBMREwDwYDVQQIEwhWaXJnaW5pYTELMAkGA1UEBhMCVVMxHzAdBgkqhkiG
9w0BCQEWEGNhQGV4YW1wbGVjYS5jb20xJTAjBgNVBAoTHFJvb3QgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkwHhcNMTEwNTE2MTUwNDAwWhcNMTIwNTE1MTUwNDAwWjBu
MRcwFQYDVQQDEw5zcC5leGFtcGxlLm9yZzERMA8GA1UECBMIVmlyZ2luaWExCzAJ
BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5jYUBleGFtcGxlLm9yZzEUMBIGA1UE
ChMLZXhhbXBsZS5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMbOLRPI
9zEFFK007CRMxxmfBwDRoDW5iaV+g2cv3CWsZ+5MXoUWQlWazITvVY47EKRGZI1d
5/8nyVL6LvxCPrH4Jl5ZNFq7jSpHe8Br7AKLfoKqqAPQrBVWTGyJ0LDZsG45lKx8
qzVzPIFgVSxJTkOmM6+DjqEPpUdHOzEIFBK1AgMBAAGjDTALMAkGA1UdEwQCMAAw
DQYJKoZIhvcNAQEEBQADggEBAJcTtBfx1uUpjnBg+LKTl36t9kf0FgfYDEhiVdOR
+axhg+zJBKmhVglddxrg3B7B1iNMhOasL1OZfNzInyKLifvs7WpnILKNLWPBvYgj
KIQiFpWKeKRHUqw0Dw9RaC1OevqrUjGs38D9xsAvz5rjXZJMfKIUKKq1sMt/4Uow
rRouVsnrHrn7vjkWTxRGdyT+dImyuLw4cePakGQmT0n+hxBF+MvpkcVrnf9QBdfW
gTxr8QfmPAITfoEPIgS20FgCcNBEw/DxySfOD0zI7PO0AqBVF6MzZCu6VrfaI25z
q/3Vn25o5c3a+3bnbFnvh8SJsZ6rxTElcLG4HdA77JDlWcA=
-----END CERTIFICATE-----
Data Base Updated
C:\OpenSSL\exampleca>openssl rsa -in apachekey.pem -out apachekey_nopass.pem
Enter pass phrase for apachekey.pem:
writing RSA key– files generated
# server key with pass phrase C:\OpenSSL\exampleca\apachekey.pem # server key without pass phrase C:\OpenSSL\exampleca\apachekey_nopass.pem # signing request C:\OpenSSL\exampleca\apachecsr.pem # pub cert C:\OpenSSL\exampleca\certs\02.pem
Setup Apache 2 SSL
httpd.conf
LoadModule ssl_module modules/mod_ssl.so # Secure (SSL/TLS) connections #Include conf/extra/httpd-ssl.conf # # Note: The following must must be present to support # starting without SSL on platforms with no /dev/random equivalent # but a statically compiled-in mod_ssl. # <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule> Listen 443 <VirtualHost _default_:443> ServerName sp.example.org SSLEngine on SSLCertificateFile C:/OpenSSL/exampleca/certs/02.pem SSLCertificateKeyFile C:/OpenSSL/exampleca/apachekey_nopass.pem </VirtualHost>
[error] Init: SSLPassPhraseDialog builtin is not supported on Win32
Cause
* Server private key is protected by passphrase.
Resolution
* Remove passphrase from server private key.
openssl rsa -in server_key_with_passphrase.pem -out server_key_without_passphrase.pem
* Comments out SSLPassPhraseDialog directive if it is found in httpd.conf.