Creating Keys
Create an RSA Key
openssl genrsa -out $name.key 2048 openssl genrsa -des3 -out $name.key 2048
Open a Key that was previously created using -des3
.
openssl rsa -in $name.key -out $name.key-open openssl rsa -in $name.key -pubout $name.key-open
Certificate Requests
Make a key, make the CSR
openssl genrsa -out $name.key 2048 openssl req
Or do it all at once
openssl req -new -out $name.csr \ -newkey rsa:2048 -nodes -keyout $name.key
View the CSR Certificate
openssl req -noout -text -in $name.crt
Create your Own Certificate Authority
Don't use the -nodes option, that removes the requirement for a passphrase
openssl req -new -x509 -days 3652 -keyout ca.key -out ca.crt openssl x509 -in ca.crt -text
Sign the Request
Usually the CSR will be sent to a third party provider for signature, but you can make your own if you want.
openssl x509 -days 3652 -CA ca/ca.crt -CAkey ca/ca.key -req -in NEW.csr -out NEW.crt
View the CSR Certificate
~ openssl x509 -text -in $name.crt
Client Connection Test
~ openssl s_client -connect $hostname:443 ~ openssl s_client -connect $hostname:465 ~ openssl s_client -connect $hostname:993 ~ openssl s_client -connect $hostname:995 ~ openssl s_client -connect $hostname:6668
Some times the error Failed to configure CA certificate chain will show in the apache configuration file. This is most likely caused by a corrupted .crt, .key or .pem file (or any number of other extensions).
See Also
View a CSR as Text
~ $ openssl req -in file.csr -noout -text
Check SSL Connection
~ $ openssl s_client -host ssl.domain.tld -port 443 CONNECTED(00000003) depth=1 /C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/serialNumber=HYrDQe7TIbfZHzfe4rVixzc-WfNWjCq4/C=US/ST=Washington/L=Seattle/O=Edoceo, Inc/OU=Internet Engineering/CN=*.edoceo.com i:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA 1 s:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA --- [ snipped ] --- New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : DHE-RSA-AES256-SHA Session-ID: Session-ID-ctx: Master-Key: BD1BE308F8D34BC79BC047AC9C5570419AB5B104A3E2037E64443BB48DBDE55728B364137012516502B4059A9113240E Key-Arg : None Start Time: 1331171036 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate) ---
Here we are testing for SSLv2
~ $ openssl s_client -host ssl.domain.tld -port 443 [ snipped ] New, SSLv2, Cipher is DES-CBC3-MD5 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv2 Cipher : DES-CBC3-MD5 Session-ID: 837714D8DD5977D01DB81829CFB93269 Session-ID-ctx: Master-Key: AFD97F3116CB12940B9F66E3234D378C6F1AA2AA029377E5 Key-Arg : F6FE6FD14FECD333 Start Time: 1331171179 Timeout : 300 (sec) Verify return code: 21 (unable to verify the first certificate) ---