- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
How to use openssl for generating ssl certificates private keys and csrs
OpenSSL is a CLI (Command Line Tool) which can be used to secure the server to generate public key infrastructure (PKI) and HTTPS. This article helps you as a quick reference to understand OpenSSL commands which are very useful in common, and for everyday scenarios especially for system administrators.
Certificate Signing Requests (CSRs)
If we want to obtain SSL certificate from a certificate authority (CA), we must generate a certificate signing request (CSR). A CSR consists of mainly the public key of a key pair, and some additional information. Both these components are merged into the certificate whenever we are signing for the CSR.
While generating a CSR, the system will prompt for information regarding the certificate and this information is called as Distinguished Name (DN). The important field in the DN is the Common Name (CN) which should be the FQND (Fully Qualified Domain Name) of the server or the host where we intend to use the certificate with.
The next item in a DN is to provide the additional information about our business or organization. If we purchase an SSL certificate from a certificate authority (CA), it is very important and required that these additional fields like “Organization” should reflect your organization for details.
Here is a general example for the CSR information prompt, when we run the OpenSSL command to generate the CSR.
Country Name (2 letter code) [US]:IN State or Province Name (full name) [Some-State]:Telengana Locality Name (eg, city) []:Hyderabad Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansole Pvt Ltd. Organizational Unit Name (eg, section) []:Application Common Name (e.g. server FQDN or YOUR name) []:domainname.com Email Address []:support@domainname.com
We can also provide the information by non-interactive answers for the CSR information generation, we can do this by adding the –subj option to any OpenSSL commands that we try to generate or run.
Below is an example for the –subj option where we can provide the information of the organization where we want to use this CSR.
-subj "/C=IN/ST=Telengana/L=Hyderabad/O=Ansole Pvt Ltd/CN=domainname.com"
Generating CSRs
In this section, we will cover about OpenSSL commands which are related to generating the CSR. This CSR can be used to request an SSL certificate from a certificate authority.
Generate a Private Key and a CSR
If we want to use HTTPS (HTTP over TLS) to secure the Apache or Nginx web servers (using a Certificate Authority (CA) to issue the SSL certificate). Also, the ‘.CSR’ which we will be generating has to be sent to a CA for requesting the certificate for obtaining CA-signed SSL.
Below is the command to create a 2048-bit private key for ‘domain.key’ and a CSR ‘domain.csr’ from the scratch.
$ openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr Generating a 2048 bit RSA private key ..............................+++ .......................................+++ writing new private key to 'domain.key' ----- 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. ----- Country Name (2 letter code) [AU]:IN State or Province Name (full name) [Some-State]:Telengana Locality Name (eg, city) []:Hyderabad Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd Organizational Unit Name (eg, section) []:Application Common Name (e.g. server FQDN or YOUR name) []:domainname.com Email Address []:support@domainname.com
The ‘–newkey rsa:2048’ is the option which we are specifying that the key should be 2048-bit using the RSA algorithm. The ’ –nodes’ option is to specifying that the private key should not be encrypted with a pass phrase. The ‘-new’ option, indicates that a CSR is being generated.
Generate a CSR from an Existing Private Key
Here we will learn about, how to generate a CSR for which you have the private key.
Below is the command to create a new .csr file based on the private key which we already have.
$ openssl req -key domain.key -new -out domain.csr 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. ----- Country Name (2 letter code) [AU]:IN State or Province Name (full name) [Some-State]:Telengana Locality Name (eg, city) []:Hyderabad Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd Organizational Unit Name (eg, section) []:Applicatoin Common Name (e.g. server FQDN or YOUR name) []:domainname.com Email Address []:support@domainname.com
Generate a CSR from an Existing Certificate and Private key
Here we can generate or renew an existing certificate where we miss the CSR file due to some reason. Here, the CSR will extract the information using the .CRT file which we have.
Below is the example for generating –
$ openssl x509 in domain.crt-signkey domain.key -x509toreq -out domain.csr
Where -x509toreq is specified that we are using the x509 certificate files to make a CSR.
Generating a Self-Singed Certificates
Here we will generate the Certificate to secure the web server where we use the self-signed certificate to use for development and testing purpose.
$ openssl req -newkey rsa:2048 -nodes -keyout domain.key-x509 -days 365 -out domain.crt Generating a 2048 bit RSA private key ................+++ .......................................................+++ writing new private key to 'domain.key' ----- 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. ----- Country Name (2 letter code) [AU]:IN State or Province Name (full name) [Some-State]:Telengana Locality Name (eg, city) []:Hyderabad Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd Organizational Unit Name (eg, section) []:Application Common Name (e.g. server FQDN or YOUR name) []:domainname.com Email Address []:support@domainname.com
Here, we generate self-signed certificate using –x509 option, we can generate certificates with a validity of 365 days using –days 365 and a temporary .CSR files are generated using the above information.
Viewing the Certificates Files
Please note that, CSR files are encoded with .PEM format (which is not readable by the humans). This is required to view a certificate. In this section, we can cover the OpenSSL commands which are encoded with .PEM files.
Viewing CSR Files Entires
The below command will be used to view the contents of the .CRT files Ex (domain.crt) in the plain text format.
$ sudo openssl x509 -text -noout -in domain.crt Certificate: Data: Version: 3 (0x2) Serial Number: 9717655772991591277 (0x86dc0c706eb0136d) Signature Algorithm: sha256WithRSAEncryption Issuer: C=IN, ST=Telengana, L=Hyderabad, O=Ansol Pvt Ltd, OU=Application , CN=domainname.com/emailAddress=support@domainname.com Validity Not Before: Jun 13 14:23:52 2016 GMT Not After : Jun 13 14:23:52 2017 GMT Subject: C=IN, ST=Telengana, L=Hyderabad, O=Ansol Pvt Ltd, OU=Applicatio n, CN=domainname.com/emailAddress=support@domainname.com ….
Working with Private Keys
In this section, will see how to use OpenSSL commands that are specific to creating and verifying the private keys.
Create a Private Key
Below is the command to create a password-protected and, 2048-bit encrypted private key file (ex. domain.key) –
$ openssl genrsa -des3 -out domain.key 2048
Enter a password when prompted to complete the process.
Verify a Private Key
Below is the command to check that a private key which we have generated (ex: domain.key) is a valid key or not
$ openssl rsa -check -in domain.key
If the private key is encrypted, you will be prompted to enter the pass phrase. Upon the successful entry, the unencrypted key will be the output on the terminal.
In this article, we have learnt some commands and usage of OpenSSL commands which deals with SSL certificates where the OpenSSL has lots of features. We will learn more features and usage in the future. I hope this article will help us to understand some basic features of the OpenSSL.
- Related Articles
- What are the SSL Certificates?
- What are private keys and public keys? How do they work?
- How to use giphy keys for ios users
- How does the IPsec use digital certificates and digital signatures?
- How To Use Let’s Encrypt SSL Certificate To Secure Nginx for free on CentOS 7
- How to Setup SSL for MySQL Server and Client on Linux
- How to encrypt a large file using openssl?
- How to deal with security certificates using Selenium?
- How to Generate and Configure a Self-Signed TSL/SSL Certificate for Nginx on Ubuntu 16.04
- Difference between IPSec and SSL
- Difference between Kerberos and SSL
- What is an SSL certificate and how does it work?
- How to handle SSL certificate error using Selenium WebDriver?
- How to use IoT for Energy Sustainability and Efficiency?
- What are the methods for generating frequent itemsets?
