Openssl Generate Encrypted Private Key
- Openssl Generate Encrypted Private Key Mac
- Openssl Create Private Key
- Openssl Generate Encrypted Private Key Mac
- Openssl Generate Encrypted Private Key Tool
- Openssl Generate Encrypted Private Key West
OpenSSL provides two command line tools for working with keys suitable for Elliptic Curve (EC) algorithms:
The only Elliptic Curve algorithms that OpenSSL currently supports are Elliptic Curve Diffie Hellman (ECDH) for key agreement and Elliptic Curve Digital Signature Algorithm (ECDSA) for signing/verifying.
x25519, ed25519 and ed448 aren't standard EC curves so you can't use ecparams or ec subcommands to work with them. If you need to generate x25519 or ed25519 keys then see the genpkey subcommand.
EC Private Key File Formats[edit]
OpenSSL in Linux is the easiest way to decrypt an encrypted private key. Use the following command to decrypt an encrypted RSA key: Make sure to replace the “server.key.secure” with the filename of your encrypted key, and “server.key” with the file name that you want for your encrypted output key file. Apr 12, 2020 root@centos8-1 # yum -y install openssl Step 2: OpenSSL encrypted data with salted password. When we create private key for Root CA certificate, we have an option to either use encryption for private key or create key without any encryption. Oct 09, 2019 How to Generate & Use Private Keys using OpenSSL's Command Line Tool. These commands generate and use private keys in unencrypted binary (not Base64 “PEM”) PKCS#8 format. The PKCS#8 format is used here because it is the most interoperable format when dealing with software that isn't based on OpenSSL.
By default OpenSSL will work with PEM files for storing EC private keys. These are text files containing base-64 encoded data. A typical traditional format private key file in PEM format will look something like the following, in a file with a '.pem' extension:
Or, in an encrypted form like this:
You may also encounter PKCS8 format private keys in PEM files. These look like this:
Or, in an encrypted form like this:
PKCS8 private key files, like the above, are capable of holding many different types of private key - not just EC keys.
You can convert between these formats if you like. All of the conversion commands can read either the encrypted or unencrypted forms of the files however you must specify whether you want the output to be encrypted or not. To convert a PKCS8 file to a traditional encrypted EC format use:
You can replace the first argument 'aes-128-cbc' with any other valid openssl cipher name (see Manual:enc(1) for a list of valid cipher names). To convert a PKCS8 file to a traditional unencrypted EC format, just drop the first argument:
Or to convert from a traditional EC format to an encrypted PKCS8 format use:
Or to a non-encrypted PKCS8 format use:
Note that by default in the above traditional format EC Private Key files are not encrypted (you have to explicitly state that the file should be encrypted, and what cipher to use), whilst for PKCS8 files the opposite is true. The default is to encrypt - you have to explicitly state that you do not want encryption applied if appropriate using the '-nocrypt' option.
As well as PEM format all of the above types of key file can also be stored in DER format. This is a binary format and so is not directly human readable - unlike a PEM file. A PEM file is essentially just DER data encoded using base 64 encoding rules with a header and footer added. Often it is more convenient to work with PEM files for this reason.
The openssl commands typically have options '-inform DER' or '-outform DER' to specify that the input or output file is DER respectively. So for example the command to convert a PKCS8 file to a traditional encrypted EC format in DER is the same as above, but with the addition of '-outform DER':
Note that you cannot encrypt a traditional format EC Private Key in DER format (and in fact if you attempt to do so the argument is silently ignored!). The same is not true for PKCS8 files - these can still be encrypted even in DER format. So for example the following will convert a traditional format key file to an ecrypted PKCS8 format DER encoded key:
EC Public Key File Formats[edit]
EC Public Keys are also stored in PEM files. A typical EC public key looks as follows:
This format is used to store all types of public keys in OpenSSL not just EC keys.
It is possible to create a public key file from a private key file (although obviously not the other way around!):
As above a DER encoded version can be created using '-outform DER':
Generating EC Keys and Parameters[edit]
An EC Parameters file contains all of the information necessary to define an Elliptic Curve that can then be used for cryptographic operations (for OpenSSL this means ECDH and ECDSA). OpenSSL contains a large set of pre-defined curves that can be used. The full list of built-in curves can be obtained through the following command:
An EC parameters file can then be generated for any of the built-in named curves as follows:
Replace secp256k1 in the above with whichever curve you are interested in.
Keys can be generated from the ecparam command, either through a pre-existing parameters file or directly by selecting the name of the curve. /mac-terminal-ssh-key-generate.html. To generate a private/public key pair from a pre-eixsting parameters file use the following:
Or to do the equivalent operation without a parameters file use the following:
Information on the parameters that have been used to generate the key are embedded in the key file itself.
By default, when creating a parameters file, or generating a key, openssl will only store the name of the curve in the generated parameters or key file, not the full set of explicit parameters associated with that name. For example:
This will simply confirm the name of the curve in the parameters file by printing out the following:
If you wish to examine the specific details of the parameters associated with a particular named curve then this can be achieved as follows:
The above command shows the details for a built-in named curve from a file, but this can also be done directly using the '-name' argument instead of '-in'. The output will look similar to the following:
The meaning of each of these parameters is discussed further on this page.
Parameters and key files can be generated to include the full explicit parameters instead of just the name of the curve if desired. This might be important if, for example, not all the target systems know the details of the named curve. In OpenSSL version 1.0.2 new named curves have been added such as brainpool512t1. Attempting to use a parameters file or key file in versions of OpenSSL less than 1.0.2 with this curve will result in an error:
This problem can be avoided if explicit parameters are used instead. So under OpenSSL 1.0.2 you could create a parameters file like this:
Looking at the parameters file you will notice that it is now much longer:
The full parameters are included rather than just the name. This can now be processed by versions of OpenSSL less than 1.0.2. So under 1.0.1:
/free-steam-key-generator-2015-no-survey.html. This will correctly display the parameters, even though this version of OpenSSL does not know about this curve.
The same is true of key files. So to generate a key with explicit parameters:
This key file can now be processed by versions of openssl that do not know about the brainpool curve.
It should be noted however that once the parameters have been converted from the curve name format into explicit parameters it is not possible to change them back again, i.e. there is no utility to take a set of explicit parameters and work out which named curve they are associated with.
See also[edit]
The openssl program provides a rich variety of commands, each of which often has a wealth of options and arguments. Many commands use an external configuration file for some or all of their arguments and have a -config
option to specify that file. The environment variable OPENSSL_CONF can be used to specify the location of the configuration file. If the environment variable is not specified, a default file is created in the default certificate storage area called openssl.cnf. The settings in this default configuration file depend on the flags set when the version of OpenSSL being used was built.
This article is an overview of the available tools provided by openssl. For all of the details on usage and implementation, you can find the manpages which are automatically generated from the source code at the official OpenSSL project home. Likewise, the source code itself may be found on the OpenSSL project home page, as well as on the OpenSSL Github. The main OpenSSL site also includes an overview of the command-line utilities, as well as links to all of their respective documentation.
- 2Basic Tasks
- 2.5Generating Keys Based on Elliptic Curves
- 2.5.1Generating the Curve Parameters
- 2.5Generating Keys Based on Elliptic Curves
- 3Commands
The entry point for the OpenSSL library is the openssl binary, usually /usr/bin/openssl on Linux. The general syntax for calling openssl is as follows:
Alternatively, you can call openssl without arguments to enter the interactive mode prompt. You may then enter commands directly, exiting with either a quit
command or by issuing a termination signal with either Ctrl+C or Ctrl+D. The following is a sample interactive session in which the user invokes the prime command twice before using the quit command to terminate the session.
This section is a brief tutorial on performing the most basic tasks using OpenSSL. For a detailed explanation of the rationale behind the syntax and semantics of the commands shown here, see the section on Commands.
Getting Help[edit]
As mentioned previously, the general syntax of a command is openssl command [ command_options ] [ command_arguments ]
. The help command is no different, but it does have its idiosyncrasies. To view the top-level help menu, you can call openssl as follows.
This query will print all of the available commands, like so:
Note the above output was truncated, so only the first four lines of output are shown.
A help menu for each command may be requested in two different ways. First, the same command used above may be repeated, followed by the name of the command to print help for.
The program will then display the valid options for the given command.
The second way of requesting the help menu for a particular command is by using the first option in the output shown above, namely openssl command -help
. Both commands will yield the same output; the help menu displayed will be exactly the same.
For additional information on the usage of a particular command, the project manpages are a great source of information. Another excellent source of information is the project perldocs. perldoc is a utility included with most if not all Perl distributions, and it's capable of displaying documentation information in a variety of formats, one of which is as manpages. Not surprisingly, the project documentation is generated from the pod files located in the doc directory of the source code.
Getting Library Version Information[edit]
As mentioned above, the version command's help menu may be queried for additional options like so:
Using the -a option to show all version information yields the following output on my current machine:
Generating an RSA Private Key[edit]
Generating a private key can be done in a variety of different ways depending on the type of key, algorithm, bits, and other options your specific use case may require. In this example, we are generating a private key using RSA and a key size of 2048 bits.
To generate a password protected private key, the previous command may be slightly amended as follows:
The addition of the -aes256 option specifies the cipher to use to encrypt the private key file. For a list of available ciphers in the library, you can run the following command:
With your private key in hand, you can use the following command to see the key's details, such as its modulus and its constituent primes. Remember to change the name of the input file to the file name of your private key.
The above command yields the following output in my specific case. Your output will differ but should be structurally similar.
Keep in mind the above key was generated solely for pedagogical purposes; never give anyone access to your private keys.
Generating a Public Key[edit]
Having previously generated your private key, you may generate the corresponding public key using the following command.
You may once again view the key details, using a slightly different command this time.
The output for the public key will be shorter, as it carries much less information, and it will look something like this.
For more information on generating keys, see the source code documentation, located in the doc/HOWTO/keys.txt file.
Generating Keys Based on Elliptic Curves[edit]
There are essentially two steps to generating a key:
- Generate the parameters for the specific curve you are using
- Use those parameters to generate the key
To see the list of curves instrinsically supported by openssl, you can use the -list_curves</t> option when calling the <tt>ecparam command.
For this example I will use the prime256v1 curve, which is an X9.62/SECG curve over a 256 bit prime field.
Generating the Curve Parameters[edit]
Having selected our curve, we now call ecparam to generate our parameters file.
Printing Parameters to Standard Out[edit]
You can print the generated curve parameters to the terminal output with the following command:
Printing Parameters as C Code[edit]
Analogously, you may also output the generated curve parameters as C code. The parameters can then be loaded by calling the get_ec_group_XXX() function. To print the C code to the current terminal's output, the following command may be used:
And here are the first few lines of the corresponding output:
Generating the Key[edit]
With the curve parameters in hand, we are now free to generate the key. Just as with the [#Generating an RSA Private Key RSA] example above, we may optionally specify a cipher algorithm with which to encrypt the private key. The call to generate the key using the elliptic curve parameters generated in the example above looks like this:
Putting it All Together[edit]
The process of generation a curve based on elliptic-curves can be streamlined by calling the genpkey command directly and specifying both the algorithm and the name of the curve to use for parameter generation. In it's simplest form, the command to generate a key based on the same curve as in the example above looks like this:
This command will result in the generated key being printed to the terminal's output.
Remember that you can specify a cipher algorithm to encrypt the key with, which something you may or may not want to do, depending on your specific use case. Here is a slightly more complete example showing a key generated with a password and written to a specific output file.
Just as with the previous example, you can use the pkey command to inspect your newly-generated key.
For more details on elliptic curve cryptography or key generation, check out the manpages.
Base64 Encoding Strings[edit]
For simple string encoding, you can use 'here string' syntax with the base64 command as below. Intuitively, the -e flag specifies the action to be encoding.
Similarly, the base64 command's -d flag may be used to indicate decoding mode.
Generating a File Hash[edit]
Openssl Generate Encrypted Private Key Mac
One of the most basic uses of the dgst command (short for digest) is viewing the hash of a given file. To do this, simply invoke the command with the specified digest algorithm to use. For this example, I will be hashing an arbitrary file on my system using the MD5, SHA1, and SHA384 algorithms.
For a list of the available digest algorithms, you can use the following command.
Openssl Create Private Key
You can also use a similar command to see the available digest commands:
Below are three sample invocations of the md5, sha1, and sha384 digest commands using the same file as the dgst command invocation above.
File Encryption and Decryption[edit]
The following example demonstrates a simple file encryption and decryption using the enc command. The first argument is the cipher algorithm to use for encrypting the file. For this example I carefully selected the AES-256 algorithm in CBC Mode by looking up the available ciphers and picking out the first one I saw. To see the list of available ciphers, you can use the following command.
You can also use the following command:
Having selected an encryption algorithm, you must then specify whether the action you are taking is either encryption or decryption via the -e or -d flags, respectively. The -iter flag specifies the number of iterations on the password used for deriving the encryption key. A higher iteration count increases the time required to brute-force the resulting file. Using this option implies enabling use of the Password-Based Key Derivation Function 2, usually set using the -pbkdf2 flag. We then use the -salt flag to enable the use of a randomly generated salt in the key-derivation function.
Putting it all together, you can see the command to encrypt a file and the corresponding output below. Note that the passwords entered by the user are blank, just as they would usually be in a terminal session.
Openssl Generate Encrypted Private Key Mac
The analogous decryption command is as follows:
There are three different kinds of commands. These are standard commands, cipher commands, and digest commands. Calling the OpenSSL top-level help command with no arguments will result in openssl printing all available commands by group, sorted alphabetically.
Openssl Generate Encrypted Private Key Tool
Standard Commands[edit]
Openssl Generate Encrypted Private Key West
Command | Description |
---|---|
asn1parse | Parse an ASN.1 sequence. |
ca | Certificate Authority (CA) Management. |
ciphers | Cipher Suite Description Determination. |
cms | CMS (Cryptographic Message Syntax) utility. |
crl | Certificate Revocation List (CRL) Management. |
crl2pkcs7 | CRL to PKCS#7 Conversion. |
dgst | Message Digest calculation. MAC calculations are superseded by mac(1). |
dhparam | Generation and Management of Diffie-Hellman Parameters. Superseded by genpkey(1) and pkeyparam(1). |
dsa | DSA Data Management. |
dsaparam | DSA Parameter Generation and Management. Superseded by genpkey(1) and pkeyparam(1). |
ec | EC (Elliptic curve) key processing. |
ecparam | EC parameter manipulation and generation. |
enc | Encoding with Ciphers. |
engine | Engine (loadable module) information and manipulation. |
errstr | Error Number to Error String Conversion. |
gendsa | Generation of DSA Private Key from Parameters. Superseded by genpkey(1) and pkey(1). |
genpkey | Generation of Private Key or Parameters. |
genrsa | Generation of RSA Private Key. Superseded by genpkey(1). |
info | Display diverse information built into the OpenSSL libraries. |
kdf | Key Derivation Functions. |
mac | Message Authentication Code Calculation. |
nseq | Create or examine a Netscape certificate sequence. |
ocsp | Online Certificate Status Protocol utility. |
passwd | Generation of hashed passwords. |
pkcs12 | PKCS#12 Data Management. |
pkcs7 | PKCS#7 Data Management. |
pkcs8 | PKCS#8 format private key conversion tool. |
pkey | Public and private key management. |
pkeyparam | Public key algorithm parameter management. |
pkeyutl | Public key algorithm cryptographic operation utility. |
prime | Compute prime numbers. |
rand | Generate pseudo-random bytes. |
rehash | Create symbolic links to certificate and CRL files named by the hash values. |
req | PKCS#10 X.509 Certificate Signing Request (CSR) Management. |
rsa | RSA key management. |
rsautl | RSA utility for signing, verification, encryption, and decryption. Superseded by pkeyutl(1). |
s_client | This implements a generic SSL/TLS client which can establish a transparent connection to a remote server speaking SSL/TLS. |
s_server | This implements a generic SSL/TLS server which accepts connections from remote clients speaking SSL/TLS. |
s_time | SSL Connection Timer. |
sess_id | SSL Session Data Management. |
smime | S/MIME mail processing. |
speed | Algorithm Speed Measurement. |
spkac | SPKAC printing and generating utility. |
srp | Maintain SRP password file. |
storeutl | Utility to list and display certificates, keys, CRLs, etc. |
ts | Time Stamping Authority tool (client/server). |
verify | X.509 Certificate Verification. |
version | OpenSSL Version Information. |
x509 | X.509 Certificate Data Management. |
- Paul Heinlein. 'OpenSSL Command-Line HOWTO'. Has many quick cookbook-style recipes for doing common tasks using the 'oppenssl' command-line application.