Aleksandar's computer workshop
Let's see what Aleksandar was fixing today.
My findings, tips & tricks related to computers, internet, programming and other stuff I was working with.

Certificate Signing Request (CSR) Generation Instructions with OpenSSL on Windows

April 17, 2009 19:55 by Aleksandar

To generate a CSR, you will need to create a key pair for your server. These two items are a digital certificate key pair and cannot be separated. If you lose your public/private key file or your password and generate a new one, your SSL Certificate will no longer match. You will have to request a new SSL Certificate and may be charged.
 
Step 1: Generate a Key Pair

The utility "openssl" is used to generate the key and CSR. You can download the binary from here
http://www.openssl.org/related/binaries.html
http://www.slproweb.com/products/Win32OpenSSL.html
 
Type the following command at the prompt:

openssl genrsa -des3 -out www.gsmblog.com.key 1024

Note: For Extended Validation certificates the key bit length must be 2048.
 
This command generates a 1024 bit RSA private key and stores it in the file www.gsmblog.com.key.
 
When prompted for a pass phrase: enter a secure password and remember it, as this pass phrase is what protects the private key. Both the private key and the certificate are required to enable SSL.
 
NOTE: To bypass the pass phrase requirement, omit the -des3 option when generating the private key.
If you leave the private key unprotected, access to the server should be restricted so that only authorized server administrators can access or read the private key file.


 
Step 2: Generate the CSR
 
Type the following command at the prompt:

openssl req -new -key www.gsmblog.com.key -out www.gsmblog.com.csr 



This command will prompt for the following X.509 attributes of the certificate:
 
Country Name: Use the two-letter code without punctuation for country, for example: NL, DE or US.
 
State or Province: Spell out the state completely; do not abbreviate the state or province name, for example: Flevoland
 
Locality or City: The Locality field is the city or town name, for example: Amsterdam. Do not abbreviate. For example: Saint Louis, not St. Louis
 
Company: If your company or department has an &, @, or any other symbol using the shift key in its name, you must spell out the symbol or omit it to enroll. Example: XY & Z Corporation would be XYZ Corporation or XY and Z Corportation.
 
Organizational Unit: This field is optional; but can be used to help identify certificates registered to an organization. The Organizational Unit (OU) field is the name of the department or organization unit making the request. To skip the OU field, press Enter on your keyboard.
 
Common Name: The Common Name is the Host + Domain Name. It looks like www.gsmblog.com or "gsmblog.com".
 
Certificates can only be used on Web servers using the Common Name specified during enrollment. For example, a certificate for the domain "domain.com" will receive a warning if accessing a site named "www.domain.com" or "secure.domain.com", because "www.domain.com" and "secure.domain.com" are different from "domain.com".
 
Please do not enter your email address, challenge password or an optional company name when generating the CSR.
 
A public/private key pair has now been created. The private key (www.gsmblog.com.key) is stored locally on the server machine and is used for decryption. The public portion, in the form of a Certificate Signing Request (certrequest.csr), will be for certificate enrollment.
 
To copy and paste the information into the enrollment form, open the file in a text editor such as Notepad and save it as a .txt file. Do not use Microsoft Word as it may insert extra hidden characters that will alter the contents of the CSR.



Once the CSR has been created, proceed to Enrollment.
 
Step 3: Backup your private key
 
Backup up the .key file and the corresponding pass phrase. A good choice is to create a copy of this file onto a diskette or other removable media. While backing up the private key is not required, having one will be helpful in the instance of server failure.