Linux操作系统安全-OpenSSL工具常用命令介绍

            Linux操作系统安全-OpenSSL工具常用命令介绍

                                          作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.OpenSSL开源项目有三个组件

  openssl:
    多用途的命令行工具,包openssl   libcrypto:
    加密算法库,包openssl-libs   libssl:
    加密模块应用库,实现了ssl及tls,包nss
[root@node101.yinzhengjie.org.cn ~]# yum search openssl
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Determining fastest mirrors
 * base: mirrors.huaweicloud.com
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.huaweicloud.com
=========================================================================== N/S matched: openssl ===========================================================================
apr-util-openssl.x86_64 : APR utility library OpenSSL crytpo support
openssl-devel.i686 : Files for development of applications which will use OpenSSL
openssl-devel.x86_64 : Files for development of applications which will use OpenSSL
openssl-perl.x86_64 : Perl scripts provided with OpenSSL
openssl-static.i686 : Libraries for static linking of applications which will use OpenSSL
openssl-static.x86_64 : Libraries for static linking of applications which will use OpenSSL
perl-Crypt-OpenSSL-Bignum.x86_64 : Perl interface to OpenSSL for Bignum
perl-Crypt-OpenSSL-RSA.x86_64 : Perl interface to OpenSSL for RSA
perl-Crypt-OpenSSL-Random.x86_64 : Perl interface to OpenSSL for Random
pyOpenSSL.x86_64 : Python wrapper module around the OpenSSL library
pyOpenSSL-doc.noarch : Documentation for pyOpenSSL
xmlsec1-openssl.i686 : OpenSSL crypto plugin for XML Security Library
xmlsec1-openssl.x86_64 : OpenSSL crypto plugin for XML Security Library
xmlsec1-openssl-devel.i686 : OpenSSL crypto plugin for XML Security Library
xmlsec1-openssl-devel.x86_64 : OpenSSL crypto plugin for XML Security Library
m2crypto.x86_64 : Support for using OpenSSL in python scripts
nss_compat_ossl.i686 : Source-level compatibility library for OpenSSL to NSS porting
nss_compat_ossl.x86_64 : Source-level compatibility library for OpenSSL to NSS porting
openssl.x86_64 : Utilities from the general purpose cryptography library with TLS implementation
openssl-libs.i686 : A general purpose cryptography library with TLS implementation
openssl-libs.x86_64 : A general purpose cryptography library with TLS implementation
openssl098e.i686 : A compatibility version of a general cryptography and TLS library
openssl098e.x86_64 : A compatibility version of a general cryptography and TLS library
perl-Crypt-SSLeay.x86_64 : Crypt::SSLeay - OpenSSL glue that provides LWP https support
perl-Net-SSLeay.x86_64 : Perl extension for using OpenSSL
qca-ossl.i686 : OpenSSL plugin for the Qt Cryptographic Architecture v2
qca-ossl.x86_64 : OpenSSL plugin for the Qt Cryptographic Architecture v2

  Name and summary matches only, use "search all" for everything.
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# yum search openssl
[root@node101.yinzhengjie.org.cn ~]# yum info openssl-libs
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.huaweicloud.com
Installed Packages
Name        : openssl-libs
Arch        : x86_64
Epoch       : 1
Version     : 1.0.2k
Release     : 16.el7
Size        : 3.1 M
Repo        : installed
From repo   : anaconda
Summary     : A general purpose cryptography library with TLS implementation
URL         : http://www.openssl.org/
License     : OpenSSL
Description : OpenSSL is a toolkit for supporting cryptography. The openssl-libs
            : package contains the libraries that are used by various applications which
            : support cryptographic algorithms and protocols.

Available Packages
Name        : openssl-libs
Arch        : i686
Epoch       : 1
Version     : 1.0.2k
Release     : 16.el7_6.1
Size        : 994 k
Repo        : updates/7/x86_64
Summary     : A general purpose cryptography library with TLS implementation
URL         : http://www.openssl.org/
License     : OpenSSL
Description : OpenSSL is a toolkit for supporting cryptography. The openssl-libs
            : package contains the libraries that are used by various applications which
            : support cryptographic algorithms and protocols.

Name        : openssl-libs
Arch        : x86_64
Epoch       : 1
Version     : 1.0.2k
Release     : 16.el7_6.1
Size        : 1.2 M
Repo        : updates/7/x86_64
Summary     : A general purpose cryptography library with TLS implementation
URL         : http://www.openssl.org/
License     : OpenSSL
Description : OpenSSL is a toolkit for supporting cryptography. The openssl-libs
            : package contains the libraries that are used by various applications which
            : support cryptographic algorithms and protocols.

[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# yum info openssl-libs

二.openssl命令

1>.查看openssl软件包及默认版本号

[root@node101.yinzhengjie.org.cn ~]# which openssl 
/usr/bin/openssl
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# rpm -qf /usr/bin/openssl 
openssl-1.0.2k-16.el7.x86_64
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl version            #程序版本号
OpenSSL 1.0.2k-fips  26 Jan 2017
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl 
OpenSSL> ?
openssl:Error: '?' is an invalid command.

Standard commands
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dh                
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
gendh             gendsa            genpkey           genrsa            
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              req               
rsa               rsautl            s_client          s_server          
s_time            sess_id           smime             speed             
spkac             ts                verify            version           
x509              

Message Digest commands (see the `dgst' command for more details)
md2               md4               md5               rmd160            
sha               sha1              

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       base64            bf                
bf-cbc            bf-cfb            bf-ecb            bf-ofb            
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
des               des-cbc           des-cfb           des-ecb           
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
des-ofb           des3              desx              idea              
idea-cbc          idea-cfb          idea-ecb          idea-ofb          
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
rc2-cfb           rc2-ecb           rc2-ofb           rc4               
rc4-40            rc5               rc5-cbc           rc5-cfb           
rc5-ecb           rc5-ofb           seed              seed-cbc          
seed-cfb          seed-ecb          seed-ofb          zlib              

OpenSSL> quit
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl              #可以支持命令行交互式

2>.enc命令

对称加密:
  工具:
    openssl enc, gpg   算法:
    3des, aes, blowfish, twofish
[root@node101.yinzhengjie.org.cn ~]# man enc
ENC(1)                                                                          OpenSSL                                                                          ENC(1)

NAME
       enc - symmetric cipher routines

SYNOPSIS
       openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt]
       [-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

DESCRIPTION
       The symmetric cipher commands allow data to be encrypted or decrypted using various block and stream ciphers using keys based on passwords or explicitly
       provided. Base64 encoding or decoding can also be performed either by itself or in addition to the encryption or decryption.

OPTIONS
       -in filename
           the input filename, standard input by default.

       -out filename
           the output filename, standard output by default.

       -pass arg
           the password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

       -salt
           use a salt in the key derivation routines. This is the default.

       -nosalt
           don't use a salt in the key derivation routines. This option SHOULD NOT be used except for test purposes or compatibility with ancient versions of OpenSSL
           and SSLeay.

       -e  encrypt the input data: this is the default.

       -d  decrypt the input data.
      -a  base64 process the data. This means that if encryption is taking place the data is base64 encoded after encryption. If decryption is set then the input data
           is base64 decoded before being decrypted.

       -base64
           same as -a

       -A  if the -a option is set then base64 process the data on one line.

       -k password
           the password to derive the key from. This is for compatibility with previous versions of OpenSSL. Superseded by the -pass argument.

       -kfile filename
           read the password to derive the key from the first line of filename.  This is for compatibility with previous versions of OpenSSL. Superseded by the -pass
           argument.

       -nosalt
           do not use a salt

       -salt
           use salt (randomly generated or provide with -S option) when encrypting (this is the default).

       -S salt
           the actual salt to use: this must be represented as a string of hex digits.

       -K key
           the actual key to use: this must be represented as a string comprised only of hex digits. If only the key is specified, the IV must additionally specified
           using the -iv option. When both a key and a password are specified, the key given with the -K option will be used and the IV generated from the password
           will be taken. It probably does not make much sense to specify both key and password.

       -iv IV
           the actual IV to use: this must be represented as a string comprised only of hex digits. When only the key is specified using the -K option, the IV must
           explicitly be defined. When a password is being specified using one of the other options, the IV is generated from this password.

       -p  print out the key and IV used.

       -P  print out the key and IV used then immediately exit: don't do any encryption or decryption.

       -bufsize number
           set the buffer size for I/O

       -nopad
           disable standard block padding

       -debug
           debug the BIOs used for I/O.

       -z  Compress or decompress clear text using zlib before encryption or after decryption. This option exists only if OpenSSL with compiled with zlib or zlib-
           dynamic option.

       -none
           Use NULL cipher (no encryption or decryption of input).

NOTES
       The program can be called either as openssl ciphername or openssl enc -ciphername. But the first form doesn't work with engine-provided ciphers, because this
       form is processed before the configuration file is read and any ENGINEs loaded.

       Engines which provide entirely new encryption algorithms (such as ccgost engine which provides gost89 algorithm) should be configured in the configuration file.
       Engines, specified in the command line using -engine options can only be used for hadrware-assisted implementations of ciphers, which are supported by OpenSSL
       core or other engine, specified in the configuration file.

       When enc command lists supported ciphers, ciphers provided by engines, specified in the configuration files are listed too.

       A password will be prompted for to derive the key and IV if necessary.

       The -salt option should ALWAYS be used if the key is being derived from a password unless you want compatibility with previous versions of OpenSSL and SSLeay.

       Without the -salt option it is possible to perform efficient dictionary attacks on the password and to attack stream cipher encrypted data. The reason for this
       is that without the salt the same password always generates the same encryption key. When the salt is being used the first eight bytes of the encrypted data are
       reserved for the salt: it is generated at random when encrypting a file and read from the encrypted file when it is decrypted.

       Some of the ciphers do not have large keys and others have security implications if not used correctly. A beginner is advised to just use a strong block cipher
       in CBC mode such as bf or des3.

       All the block ciphers normally use PKCS#5 padding also known as standard block padding: this allows a rudimentary integrity or password check to be performed.
       However since the chance of random data passing the test is better than 1 in 256 it isn't a very good test.

       If padding is disabled then the input data must be a multiple of the cipher block length.

       All RC2 ciphers have the same key and effective key length.

       Blowfish and RC5 algorithms use a 128 bit key.

SUPPORTED CIPHERS
       Note that some of these ciphers can be disabled at compile time and some are available only if an appropriate engine is configured in the configuration file.
       The output of the enc command run with unsupported options (for example openssl enc -help) includes a list of ciphers, supported by your versesion of OpenSSL,
       including ones provided by configured engines.

       The enc program does not support authenticated encryption modes like CCM and GCM. The utility does not store or retrieve the authentication tag.

        base64             Base 64

        bf-cbc             Blowfish in CBC mode
        bf                 Alias for bf-cbc
        bf-cfb             Blowfish in CFB mode
        bf-ecb             Blowfish in ECB mode
        bf-ofb             Blowfish in OFB mode

        cast-cbc           CAST in CBC mode
        cast               Alias for cast-cbc
        cast5-cbc          CAST5 in CBC mode
        cast5-cfb          CAST5 in CFB mode
        cast5-ecb          CAST5 in ECB mode
     cast5-ofb          CAST5 in OFB mode

        des-cbc            DES in CBC mode
        des                Alias for des-cbc
        des-cfb            DES in CBC mode
        des-ofb            DES in OFB mode
        des-ecb            DES in ECB mode

        des-ede-cbc        Two key triple DES EDE in CBC mode
        des-ede            Two key triple DES EDE in ECB mode
        des-ede-cfb        Two key triple DES EDE in CFB mode
        des-ede-ofb        Two key triple DES EDE in OFB mode

        des-ede3-cbc       Three key triple DES EDE in CBC mode
        des-ede3           Three key triple DES EDE in ECB mode
        des3               Alias for des-ede3-cbc
        des-ede3-cfb       Three key triple DES EDE CFB mode
        des-ede3-ofb       Three key triple DES EDE in OFB mode

        desx               DESX algorithm.

        gost89             GOST 28147-89 in CFB mode (provided by ccgost engine)
        gost89-cnt        `GOST 28147-89 in CNT mode (provided by ccgost engine)

        idea-cbc           IDEA algorithm in CBC mode
        idea               same as idea-cbc
        idea-cfb           IDEA in CFB mode
        idea-ecb           IDEA in ECB mode
        idea-ofb           IDEA in OFB mode

        rc2-cbc            128 bit RC2 in CBC mode
        rc2                Alias for rc2-cbc
        rc2-cfb            128 bit RC2 in CFB mode
        rc2-ecb            128 bit RC2 in ECB mode
       rc2-ofb            128 bit RC2 in OFB mode
        rc2-64-cbc         64 bit RC2 in CBC mode
        rc2-40-cbc         40 bit RC2 in CBC mode

        rc4                128 bit RC4
        rc4-64             64 bit RC4
        rc4-40             40 bit RC4

        rc5-cbc            RC5 cipher in CBC mode
        rc5                Alias for rc5-cbc
        rc5-cfb            RC5 cipher in CFB mode
        rc5-ecb            RC5 cipher in ECB mode
        rc5-ofb            RC5 cipher in OFB mode

        aes-[128|192|256]-cbc  128/192/256 bit AES in CBC mode
        aes-[128|192|256]      Alias for aes-[128|192|256]-cbc
        aes-[128|192|256]-cfb  128/192/256 bit AES in 128 bit CFB mode
        aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode
        aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode
        aes-[128|192|256]-ecb  128/192/256 bit AES in ECB mode
        aes-[128|192|256]-ofb  128/192/256 bit AES in OFB mode

EXAMPLES
       Just base64 encode a binary file:

        openssl base64 -in file.bin -out file.b64

       Decode the same file

        openssl base64 -d -in file.b64 -out file.bin

       Encrypt a file using triple DES in CBC mode using a prompted password:

        openssl des3 -salt -in file.txt -out file.des3

       Decrypt a file using a supplied password:

        openssl des3 -d -salt -in file.des3 -out file.txt -k mypassword

       Encrypt a file then base64 encode it (so it can be sent via mail for example) using Blowfish in CBC mode:

        openssl bf -a -salt -in file.txt -out file.bf

       Base64 decode a file then decrypt it:

        openssl bf -d -salt -a -in file.bf -out file.txt

       Decrypt some data using a supplied 40 bit RC4 key:

        openssl rc4-40 -in file.rc4 -out file.txt -K 0102030405

BUGS
       The -A option when used with large files doesn't work properly.

       There should be an option to allow an iteration count to be included.

       The enc program only supports a fixed number of algorithms with certain parameters. So if, for example, you want to use RC2 with a 76 bit key or RC4 with an 84
       bit key you can't use this program.

1.0.2k                                                                         2017-01-26                                                                        ENC(1)
[root@node101.yinzhengjie.org.cn ~]# man enc                    #查看帮助信息
[root@node101.yinzhengjie.org.cn ~]# cp /etc/sysctl.conf  ./
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# ll
total 4
-rw-r--r-- 1 root root 735 Dec 21 09:48 sysctl.conf
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl enc -e -des3 -in sysctl.conf -out my_sysctl.conf            #指定des3对称加密算法进行加密
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# ll
total 8
-rw-r--r-- 1 root root 752 Dec 21 09:50 my_sysctl.conf
-rw-r--r-- 1 root root 735 Dec 21 09:48 sysctl.conf
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl enc -d -des3 -in my_sysctl.conf -out my_sysctl.conf.bak        #指定des3对称加密算法进行解密
enter des-ede3-cbc decryption password:
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# ll
total 12
-rw-r--r-- 1 root root 752 Dec 21 09:50 my_sysctl.conf
-rw-r--r-- 1 root root 735 Dec 21 09:50 my_sysctl.conf.bak
-rw-r--r-- 1 root root 735 Dec 21 09:48 sysctl.conf
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# file my_sysctl.conf          #该文件已经被加密了,我们直接查看了,需要进行解密后才能查看
my_sysctl.conf: data
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# file my_sysctl.conf.bak 
my_sysctl.conf.bak: ASCII text
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# file sysctl.conf 
sysctl.conf: ASCII text
[root@node101.yinzhengjie.org.cn ~]# 

3>.dgst命令

单向加密:
  工具:
    md5sum, sha1sum, sha224sum,sha256sum,openssl dgst,...

MAC: 
  Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制   CBC-MAC   HMAC:使用md5或sha1算法
[root@node101.yinzhengjie.org.cn ~]# man dgst 
DGST(1)                                                                         OpenSSL                                                                         DGST(1)

NAME
       dgst, sha, sha1, mdc2, ripemd160, sha224, sha256, sha384, sha512, md2, md4, md5, dss1 - message digests

SYNOPSIS
       openssl dgst [-sha|-sha1|-mdc2|-ripemd160|-sha224|-sha256|-sha384|-sha512|-md2|-md4|-md5|-dss1] [-c] [-d] [-hex] [-binary] [-r] [-non-fips-allow] [-out
       filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-hmac key] [-non-fips-allow]
       [-fips-fingerprint] [file...]

       openssl [digest] [...]

DESCRIPTION
       The digest functions output the message digest of a supplied file or files in hexadecimal.  The digest functions also generate and verify digital signatures
       using message digests.

OPTIONS
       -c  print out the digest in two digit groups separated by colons, only relevant if hex format output is used.

       -d  print out BIO debugging information.

       -hex
           digest is to be output as a hex dump. This is the default case for a "normal" digest as opposed to a digital signature.  See NOTES below for digital
           signatures using -hex.

       -binary
           output the digest or signature in binary form.

       -r  output the digest in the "coreutils" format used by programs like sha1sum.

       -non-fips-allow
           Allow use of non FIPS digest when in FIPS mode.  This has no effect when not in FIPS mode.

       -out filename
           filename to output to, or standard output by default.

       -sign filename
           digitally sign the digest using the private key in "filename".

       -keyform arg
           Specifies the key format to sign digest with. The DER, PEM, P12, and ENGINE formats are supported.

       -engine id
           Use engine id for operations (including private key storage).  This engine is not used as source for digest algorithms, unless it is also specified in the
           configuration file.

       -sigopt nm:v
           Pass options to the signature algorithm during sign or verify operations.  Names and values of these options are algorithm-specific.

       -passin arg
           the private key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

       -verify filename
           verify the signature using the the public key in "filename".  The output is either "Verification OK" or "Verification Failure".

       -prverify filename
           verify the signature using the  the private key in "filename".

       -signature filename
           the actual signature to verify.

       -hmac key
           create a hashed MAC using "key".

       -mac alg
           create MAC (keyed Message Authentication Code). The most popular MAC algorithm is HMAC (hash-based MAC), but there are other MAC algorithms which are not
           based on hash, for instance gost-mac algorithm, supported by ccgost engine. MAC keys and other options should be set via -macopt parameter.
     -macopt nm:v
           Passes options to MAC algorithm, specified by -mac key.  Following options are supported by both by HMAC and gost-mac:

           key:string
                   Specifies MAC key as alphnumeric string (use if key contain printable characters only). String length must conform to any restrictions of the MAC
                   algorithm for example exactly 32 chars for gost-mac.

           hexkey:string
                   Specifies MAC key in hexadecimal form (two hex digits per byte).  Key length must conform to any restrictions of the MAC algorithm for example
                   exactly 32 chars for gost-mac.

       -rand file(s)
           a file or files containing random data used to seed the random number generator, or an EGD socket (see RAND_egd(3)).  Multiple files can be specified
           separated by a OS-dependent character.  The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

       -non-fips-allow
           enable use of non-FIPS algorithms such as MD5 even in FIPS mode.

       -fips-fingerprint
           compute HMAC using a specific key for certain OpenSSL-FIPS operations.

       file...
           file or files to digest. If no files are specified then standard input is used.

EXAMPLES
       To create a hex-encoded message digest of a file:
        openssl dgst -md5 -hex file.txt

       To sign a file using SHA-256 with binary file output:
        openssl dgst -sha256 -sign privatekey.pem -out signature.sign file.txt

       To verify a signature:
        openssl dgst -sha256 -verify publickey.pem 
        -signature signature.sign 
        file.txt

NOTES
       The digest of choice for all new applications is SHA1. Other digests are however still widely used.

       When signing a file, dgst will automatically determine the algorithm (RSA, ECC, etc) to use for signing based on the private key's ASN.1 info.  When verifying
       signatures, it only handles the RSA, DSA, or ECDSA signature itself, not the related data to identify the signer and algorithm used in formats such as x.509,
       CMS, and S/MIME.

       A source of random numbers is required for certain signing algorithms, in particular ECDSA and DSA.

       The signing and verify options should only be used if a single file is being signed or verified.

       Hex signatures cannot be verified using openssl.  Instead, use "xxd -r" or similar program to transform the hex signature into a binary signature prior to
       verification.

1.0.2k                                                                         2017-01-26                                                                       DGST(1)
[root@node101.yinzhengjie.org.cn ~]# man dgst                    #查看帮助信息
[root@node101.yinzhengjie.org.cn ~]# cp /etc/fstab ./
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# ll
total 4
-rw-r--r-- 1 root root 541 Dec 21 09:54 fstab
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl dgst -md5 fstab           #指定md5单项散列算法,可以很快得到的一个hash摘要值
MD5(fstab)= 964ddd7a410b74512ea8dfaa11ac5157
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# md5sum fstab 
964ddd7a410b74512ea8dfaa11ac5157  fstab
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 

4>.生成用户密码

[root@node101.yinzhengjie.org.cn ~]# man sslpasswd
PASSWD(1)                                                                       OpenSSL                                                                       PASSWD(1)

NAME
       passwd - compute password hashes

SYNOPSIS
       openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}

DESCRIPTION
       The passwd command computes the hash of a password typed at run-time or the hash of each password in a list.  The password list is taken from the named file for
       option -in file, from stdin for option -stdin, or from the command line, or from the terminal otherwise.  The Unix standard algorithm crypt and the MD5-based
       BSD password algorithm 1 and its Apache variant apr1 are available.

OPTIONS
       -crypt
           Use the crypt algorithm (default).

       -1  Use the MD5 based BSD password algorithm 1.

       -apr1
           Use the apr1 algorithm (Apache variant of the BSD algorithm).

       -salt string
           Use the specified salt.  When reading a password from the terminal, this implies -noverify.

       -in file
           Read passwords from file.

       -stdin
           Read passwords from stdin.

       -noverify
           Don't verify when reading a password from the terminal.


       -quiet
           Don't output warnings when passwords given at the command line are truncated.

       -table
           In the output list, prepend the cleartext password and a TAB character to each password hash.

EXAMPLES
       openssl passwd -crypt -salt xx password prints xxj31ZMTZzkVA.

       openssl passwd -1 -salt xxxxxxxx password prints $1$xxxxxxxx$UYCIxa628.9qXjpQCjM4a..

       openssl passwd -apr1 -salt xxxxxxxx password prints $apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0.

1.0.2k                                                                         2017-01-26                                                                     PASSWD(1)
[root@node101.yinzhengjie.org.cn ~]# man sslpasswd
[root@node101.yinzhengjie.org.cn ~]# openssl passwd -1            #此处我输入的是"yinzhengjie"得到一个密码如下
Password: 
Verifying - Password: 
$1$IetQRS9t$hoCuehrhgRASJxU08nQBE.
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl passwd -1            #此处我依旧输入的是"yinzhengjie"得到一个新的密码如下,我擦,是不是很神奇?输入相同的密码得到的结果却不一致!这是因为我们没有指定盐,默认是一个随机值
Password: 
Verifying - Password: 
$1$VsdAqm1E$2aQXCaV7SSu8gCl9YitHI.
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl passwd -1 -salt "IetQRS9t"    #上面标记红色的就是指定的盐,我们使用指定的盐进行加密,发现使用相同的盐且密码一直时得到的结果是一致的
Password: 
$1$IetQRS9t$hoCuehrhgRASJxU08nQBE.
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl passwd -1 -salt "VsdAqm1E"    #再次印证了使用相同的盐且密码相同的情况下,得到的结果是一致的。
Password: 
$1$VsdAqm1E$2aQXCaV7SSu8gCl9YitHI.
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 

5>.生成随机数

语法:
  openssl rand -base64|-hex NUM     NUM:
      表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2
[root@node101.yinzhengjie.org.cn ~]# man sslrand



RAND(1)                                                                         OpenSSL                                                                         RAND(1)

NAME
       rand - generate pseudo-random bytes

SYNOPSIS
       openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

DESCRIPTION
       The rand command outputs num pseudo-random bytes after seeding the random number generator once.  As in other openssl command line tools, PRNG seeding uses the
       file $HOME/.rnd or .rnd in addition to the files given in the -rand option.  A new $HOME/.rnd or .rnd file will be written back if enough seeding was obtained
       from these sources.

OPTIONS
       -out file
           Write to file instead of standard output.

       -rand file(s)
           Use specified file or files or EGD socket (see RAND_egd(3)) for seeding the random number generator.  Multiple files can be specified separated by a OS-
           dependent character.  The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

       -base64
           Perform base64 encoding on the output.

       -hex
           Show the output as a hex string.

SEE ALSO
       RAND_bytes(3)

1.0.2k                                                                         2017-01-26                                                                       RAND(1)
[root@node101.yinzhengjie.org.cn ~]# man sslrand
[root@node101.yinzhengjie.org.cn ~]# openssl rand  -hex 6
3c3f702525c1
[root@node101.yinzhengjie.org.cn ~]# openssl rand  -hex 6
5da7fe82a1d6
[root@node101.yinzhengjie.org.cn ~]# openssl rand  -hex 6
2064b6e40f46
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl rand -base64 6
cno1an+B
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl rand -base64 6
k1KMD3+N
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl rand -base64 6
yCMifZfM
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl rand  -hex 9
18c1541b7e4f63cb44
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl rand -base64 9
WS7G4KPNu0Jt
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 

6>. 生成密钥对儿

公钥加密:
  算法:
    RSA, ELGamal   工具:
    gpg, openssl rsautl(man rsautl)
数字签名:   算法:
    RSA, DSA, ELGamal   
密钥交换:   算法:
    dh   DSA:
    Digital Signature Algorithm   DSS:
    Digital Signature Standard   RSA:
[root@node101.yinzhengjie.org.cn ~]# man genrsa
GENRSA(1)                                                                       OpenSSL                                                                       GENRSA(1)

NAME
       genrsa - generate an RSA private key

SYNOPSIS
       openssl genrsa [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-f4] [-3]
       [-rand file(s)] [-engine id] [numbits]

DESCRIPTION
       The genrsa command generates an RSA private key.

OPTIONS
       -out filename
           the output filename. If this argument is not specified then standard output is used.

       -passout arg
           the output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

       -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
           These options encrypt the private key with specified cipher before outputting it. If none of these options is specified no encryption is used. If encryption
           is used a pass phrase is prompted for if it is not supplied via the -passout argument.

       -F4|-3
           the public exponent to use, either 65537 or 3. The default is 65537.

       -rand file(s)
           a file or files containing random data used to seed the random number generator, or an EGD socket (see RAND_egd(3)).  Multiple files can be specified
           separated by a OS-dependent character.  The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

       -engine id
           specifying an engine (by its unique id string) will cause genrsa to attempt to obtain a functional reference to the specified engine, thus initialising it
           if needed. The engine will then be set as the default for all available algorithms.

       numbits
           the size of the private key to generate in bits. This must be the last option specified. The default is 512.

NOTES
       RSA private key generation essentially involves the generation of two prime numbers. When generating a private key various symbols will be output to indicate
       the progress of the generation. A . represents each number which has passed an initial sieve test, + means a number has passed a single round of the Miller-
       Rabin primality test. A newline means that the number has passed all the prime tests (the actual number depends on the key size).

       Because key generation is a random process the time taken to generate a key may vary somewhat.

BUGS
       A quirk of the prime generation algorithm is that it cannot generate small primes. Therefore the number of bits should not be less that 64. For typical private
       keys this will not matter because for security reasons they will be much larger (typically 1024 bits).

SEE ALSO
       gendsa(1)

1.0.2k                                                                         2017-01-26                                                                     GENRSA(1)
[root@node101.yinzhengjie.org.cn ~]# man genrsa
[root@node101.yinzhengjie.org.cn ~]# mkdir ssl && cd ssl
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# (umask 066;openssl genrsa -out test.key 1024)    
Generating RSA private key, 1024 bit long modulus
.................++++++
..........++++++
e is 65537 (0x10001)
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# ll
total 4
-rw------- 1 root root 887 Dec 21 10:22 test.key
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# (umask 066;openssl genrsa -out test2.key -des3 1024)
Generating RSA private key, 1024 bit long modulus
..............................................++++++
......++++++
e is 65537 (0x10001)
Enter pass phrase for test2.key:
Verifying - Enter pass phrase for test2.key:
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# ll
total 8
-rw------- 1 root root 963 Dec 21 10:23 test2.key
-rw------- 1 root root 887 Dec 21 10:22 test.key
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# cat test.key 
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC7n9G30qtd+8kr4Z4lFskT5aS+6/7DYr10k9TI+fgbWBpRbsnc
wPPQV+YVMn12KYtVoglgIAbDeRTfygS4q8NFqk9kYRKRlzcBIsVkem5I5P5BM9y0
2CaYZDohwOniTK5yc886EjBkvTCcglWo2oCcUdjN8+4ZoQaauoK6T0K72QIDAQAB
AoGAcpM9SWkf9wusJNzpazLH5huliGWrNPvWQBuKpJRpm6EoqTPjl6hI+6DBw44K
qZ7jFI8X9Jh6KOKHCcZfLbrOSm/KMjjVsb/3YCG174wyI+U7RCqWU/xH8FMhmOeG
LlSJIycwOnWq6CGDOsmWyhbepYX3+uoucIHU3qxUG1/p+FECQQDi6CXV0/bmBb6O
2odsgY047m5Q35tFR1ZrzhTJ1ZNfwaizFbfl0Mt4Fstm8Ie3dQAp3HjR+686NXNc
M6VN5QklAkEA065JDAj6PAzHhmnn0bCG/k8NUii9ksUuXT8WotdmgVzIUWHbiPtO
mws3v6nbZYBy0tSSX34/itpwQB5Agj5LpQJBAL7DoZuF2ttEFRMQ0i39NPeaLRC9
DVNPSG7WEVAmyQIGVIhLSBJkWcuajmL68X7hVMPc4Y7YZFcxvMzVdrJoTikCQQC6
jHHbpV3B5hFAp7yg001keQ5oRXcsDZHao2qzf9jaUIZJElCC29ZeVPiAdJThUt3e
Z2/HsF8XY4JhP0figDvxAkAcszHvpgCIV+831m8kv4XrXLL2yMqqALV8CzAXBtWX
X8gZ+pbI4yC+QfMg4Hj2h4HRPN/qRfs3zkeinsnhGZ0Y
-----END RSA PRIVATE KEY-----
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# cat test.key          #私钥未被加密
[root@node101.yinzhengjie.org.cn ~/ssl]# cat test2.key 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,A10A88A3A65686C4

g2uwaR6TgLObrkEAz/VNGzWhmH4IHd3XHceYnP8M0ReMARjk/keiATkQ1MmBY++M
dP+f77+g/u3Oq8SbqqJNwBKHC+rZeWjcRI0nDJ7gcDtxxq0VsAno6aUeRxRt5xrV
HsjoohpVjty9K0/ioE7y69JcYaxhuGotvxmReKWoL8DKvo73EJh5ZP/wMNNBtl7w
8Xh4SD/QqsmJ8HLX/O0rmo2INT8ahvHrhBA4cnAvnjqjPpt8BJbhYZakDbG3pAg6
abd9o6X0Tr3jWI9YxV8KkXZTpIsmbL4lhWE2pdLafDDDCd+zoVTbrRbA9vm76A1+
Jl0mX1ndl5DwC/S6gs4pW2EQX99tmWad/xYMVpB1j3UdBRsi+1LG8oFS0ngStGxv
RjNl1zGPUhm226SnM5P2Urj2X7TiwRQbLirqI0iJlELhvK8AVAsG2UWPpy1B8y4p
2Gkvu9l4YDBP3iH5OsctzI14aU3NWTRhUUNwVZZbRo+YfjQ6bDx6/8ZUf9iNYGQW
vlbuXLl3/SzaDjhoigXke5JxH31cN4IbQMbhzCZP5uemYaFdcPRSKGt5hyIj/Uxj
moZHfyk21pCtiCV2KipK8hOjXXJmu1yvtrvmtbg7mKiE4wt2G7qTeVFSN/KwF6kf
TJnPonWgqliaO20bg3a0nNgmpkdb/qKmj1xt7HCDQt+xVM98JFVPfuFtcjhDi75L
5BQ+Qt0IXVh1QkSvaB4QdU4ZICozX5cJYWO1EPBvuqOr2BL8bFapAvsADZRaXP+b
wuUVHkUc7+vCzFyvNaorVKQFB0+TBJYib6ycjpCRxqY5AcqcY9HHWQ==
-----END RSA PRIVATE KEY-----
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# cat test2.key          #私钥已被des3加密
[root@node101.yinzhengjie.org.cn ~/ssl]# cat test2.key 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,A10A88A3A65686C4

g2uwaR6TgLObrkEAz/VNGzWhmH4IHd3XHceYnP8M0ReMARjk/keiATkQ1MmBY++M
dP+f77+g/u3Oq8SbqqJNwBKHC+rZeWjcRI0nDJ7gcDtxxq0VsAno6aUeRxRt5xrV
HsjoohpVjty9K0/ioE7y69JcYaxhuGotvxmReKWoL8DKvo73EJh5ZP/wMNNBtl7w
8Xh4SD/QqsmJ8HLX/O0rmo2INT8ahvHrhBA4cnAvnjqjPpt8BJbhYZakDbG3pAg6
abd9o6X0Tr3jWI9YxV8KkXZTpIsmbL4lhWE2pdLafDDDCd+zoVTbrRbA9vm76A1+
Jl0mX1ndl5DwC/S6gs4pW2EQX99tmWad/xYMVpB1j3UdBRsi+1LG8oFS0ngStGxv
RjNl1zGPUhm226SnM5P2Urj2X7TiwRQbLirqI0iJlELhvK8AVAsG2UWPpy1B8y4p
2Gkvu9l4YDBP3iH5OsctzI14aU3NWTRhUUNwVZZbRo+YfjQ6bDx6/8ZUf9iNYGQW
vlbuXLl3/SzaDjhoigXke5JxH31cN4IbQMbhzCZP5uemYaFdcPRSKGt5hyIj/Uxj
moZHfyk21pCtiCV2KipK8hOjXXJmu1yvtrvmtbg7mKiE4wt2G7qTeVFSN/KwF6kf
TJnPonWgqliaO20bg3a0nNgmpkdb/qKmj1xt7HCDQt+xVM98JFVPfuFtcjhDi75L
5BQ+Qt0IXVh1QkSvaB4QdU4ZICozX5cJYWO1EPBvuqOr2BL8bFapAvsADZRaXP+b
wuUVHkUc7+vCzFyvNaorVKQFB0+TBJYib6ycjpCRxqY5AcqcY9HHWQ==
-----END RSA PRIVATE KEY-----
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# openssl rsa -in test2.key -out test2.bak.key 
Enter pass phrase for test2.key:
writing RSA key
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# ll
total 12
-rw-r--r-- 1 root root 887 Dec 21 10:28 test2.bak.key
-rw------- 1 root root 963 Dec 21 10:23 test2.key
-rw------- 1 root root 887 Dec 21 10:24 test.key
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# cat test2.bak.key 
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC0X5rHhleCbl3XxD8ygpOHtXCTADc8eJIvigc0pUqGFJGBAlHq
I/GMho1SvDYDKO7zxhztd6h807wQiRmmr9gCExJButPJENmZ4CJcbguVjVnySMxc
3Tm8JQiGerMsP654bh0+yYEwPnAqFHC8Ca9mxJLmtNokDSKP78e9LDYt8QIDAQAB
AoGAbIgiT/BL85WJLe1NwYzETKImLK2yjtZVz/kTwN+8adUygBfvRh1+mHnVy3So
Y1pb/Z61hUW8we99d82m+59PL1zZf/aQ1FBgfiyv8WXEnWsEs8J1PpvlDKfGr9X4
3KqEd8KnHHnrFI0sRXwk9AK3IFce3L7jCqpztlrG35R9eukCQQDpyhtBcW7KJtYW
pQHk3NOO0pLD6Lf/Re38e+SBuc2ijvpDpt+ZEAPl6hkkTVJDcczlTucNQE7O3vwN
V/Tsb3AvAkEAxYJj1bTOeP3zLtb+IfLyc64ciqJuzvIF4RC0o4y3uZ1rjYxpLhT5
CFFjDq+pjXSX3vwzFbebiKvU6rMFyHmb3wJBAJlGlz39t4wzkBMClc5NdSpjJjPp
JJDpcREizPq8LXSRVsT56Ai69kNLirZBN1jeiF4ir9sBOWnpyciZzQsiOKMCQC8n
zWw1ieJLR2dUf0JdvdMuq7PRykDwecTddzNhInBXjFk0P9x3t2lr/QmBmSqjvqrH
be7uclz0IZaTfXr6xeMCQQCoQ9cgHu8SPQIXXXNrwuwlHmHqs4dURNLa6jJycsLQ
xIYVn3x5vl1mywwalMFQRzu4PWwydDHFosfAUpOSMZ0z
-----END RSA PRIVATE KEY-----
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# openssl rsa -in test2.key -out test2.bak.key        #将加密的私钥进行解密 
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# cd /etc/pki/tls/certs/
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# 
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# ll
total 12
lrwxrwxrwx. 1 root root   49 Jul  8 16:23 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx. 1 root root   55 Jul  8 16:23 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
-rwxr-xr-x. 1 root root  610 Oct 31  2018 make-dummy-cert
-rw-r--r--. 1 root root 2516 Oct 31  2018 Makefile
-rwxr-xr-x. 1 root root  829 Oct 31  2018 renew-dummy-cert
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# 
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# make ~/ssl/test100.key      #进入到"/etc/pki/tls/certs"目录后使用make命令可以生成加密的私钥,主要是该目录有一个Makefile文件
umask 77 ; 
/usr/bin/openssl genrsa -aes128 2048 > /root/ssl/test100.key
Generating RSA private key, 2048 bit long modulus
.....................................................+++
...........................................................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# 
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# ll ~/ssl/test100.key 
-rw------- 1 root root 1766 Dec 21 10:31 /root/ssl/test100.key
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# 
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# cat ~/ssl/test100.key 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,72305F310C826FAD49FF9DF021894C36

zs69lfGhV8a/GF6h6EJTKoBvCKSHs0Dn3jubW0FNUrh0IFC/RSn+Yhu2TWPdMp/j
3wZUbNYj8RTJ43yIfsoWTuBgTU1zlL2e1aTR5YO8VpfPHBT4hh5xnq9QWCTRPzk2
+FS2kpj/Iod3qmnOA2L8D00QMAQrc2anJYAJV8mQaRNfFaTw4Ka8zttgI6DiO6Pk
WYlPaD6e4EJkfUZF6kTm0CrUlRK+RRPoz4RzzBj33tXGxOCV4d6n0n2X07RnbRuE
Vayigy0p1jnW2ovC/IXWp13zYNXA4nWMqtljuqRN8ovrFdxY8DGkkUgPvYGQtKPZ
EfaIBctvgQtDrmmeOtcGLARoqGzTESPC5mzlMtU9Hc+UJnQZ87r/SUDhfrjWWC2m
4hmPzGaNcNjlW3zEs9jATnHjeHcAwvu1jGrhgGgrno2xsQv3eJzILRV7BQP5myiS
wl6whWB4SW5D/U5BHouM82Y4QJ6SX3MI3rG1PQ8M3dtyg9Miou5cVSbIF8BXBW7n
cfVjI7/B1HVQ4NIO89Sv15+fr+PGf46o2Ig8axep287itInEBZjCsmgLN0x9cC6T
W0P8NwjIXdrBOtCnuLxrlhrU2s0c2XfH4+Pal65QUkOWizLK88Y1RkLLXmGDb09D
1LYVcz2A2uM75Yh4zrFLtvJla/An/Qu9jvKGbgL7plB1dSSz4ajyeyYCnnM13A31
jmi2CmwAxJwTEbUSzCFtcGVCL7kvd7ETtnKZLgwAgXuEy3mxHu0aNYN2blc5222w
j19MLYBmbN4rd/Remhk2Y9vsBtygSJRNVoOEVEcnz4u12vsPIUO6HgAVbAARRXOK
rqaZD8+2qZxZq/um3pSt1VNufg66NIcP5f4Uww+F6AqC5XqOvCvoPxbqcqAEbxP/
wigmsPiqagfnpv/rtKArY/sHcpLeSUOrNGd6bDt7rVDY7zZdjgMmLbhxoaNCD8M3
CpFYhVEGH9A0hzY8KO+O/XZEMqwbsq1rMyjPQ2Rpz1CjpGG7/gVbPVlv7OoBEEqy
FvsP1v97kNG4SSFhAgIQdRsYKsSrM6Fj1k9BB0XVKGQK34o3r2WB9k2/IpYHZvPI
qam8LCFLI150L315gJJVKk453ZklQVKpZoI7voX4FG9x3XPuYKpywsjf/y/ErMpG
g52seo7igYHj5u63fbgpHGJRGpNAeMhKCxvXOkCUjl8e0OyowdpRmt61HVkHARae
q/BC+AX4KmOYEeHfytPe9vB74xERWy86wHGa6KU3IqcVWh/sWsTrDEuhwO0Kl3dD
6Trrw85PCv3l6NpU9I06sI2roNrtCPYXXMYPVcrmbnAxS2tpoqmevXrjf1cDocCl
1Bd2vdjIdYT92H3cB9My0RpgLb2cqPMP6GtjitJAIGWVmTPixcQsFjRpyhthuddX
DauxAzZh6X/DtjjeIPNXCkYnck6xWz8vU+fqr6kd1AXLyDA0MUJr8YuEXGn7SlFK
S9TgZY22S3waLHfVEBNp/u6m4b/BO4ZeSzqAu4cRfmFH7Lw49pRQebTPEOMchfO2
uZMvNYYiyjqwk00PcKBcX/yJHJyD/uUJ+yj2MGftUWBUY4elPUZ6EKLMSEPjf6SA
-----END RSA PRIVATE KEY-----
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# 
[root@node101.yinzhengjie.org.cn /etc/pki/tls/certs]# make ~/ssl/test100.key   #进入到"/etc/pki/tls/certs"目录后使用make命令可以生成加密的私钥,主要是该目录有一个Makefile文件
[root@node101.yinzhengjie.org.cn ~/ssl]# ll
total 16
-rw------- 1 root root 1766 Dec 21 10:31 test100.key
-rw-r--r-- 1 root root  887 Dec 21 10:28 test2.bak.key
-rw------- 1 root root  963 Dec 21 10:23 test2.key
-rw------- 1 root root  887 Dec 21 10:24 test.key
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# openssl rsa -in test100.key -pubout -out test100.pubkey       #从私钥中导出公钥,如果私钥设置的有密码需要验证密码后才能生成公钥文件
Enter pass phrase for test100.key:
writing RSA key
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# ll
total 20
-rw------- 1 root root 1766 Dec 21 10:31 test100.key
-rw-r--r-- 1 root root  451 Dec 21 10:35 test100.pubkey
-rw-r--r-- 1 root root  887 Dec 21 10:28 test2.bak.key
-rw------- 1 root root  963 Dec 21 10:23 test2.key
-rw------- 1 root root  887 Dec 21 10:24 test.key
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# openssl rsa -in test.key -pubout -out test.pubkey         #如果私钥文件没有设置密码则直接可以导出公钥
writing RSA key
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# ll
total 24
-rw------- 1 root root 1766 Dec 21 10:31 test100.key
-rw-r--r-- 1 root root  451 Dec 21 10:35 test100.pubkey
-rw-r--r-- 1 root root  887 Dec 21 10:28 test2.bak.key
-rw------- 1 root root  963 Dec 21 10:23 test2.key
-rw------- 1 root root  887 Dec 21 10:24 test.key
-rw-r--r-- 1 root root  272 Dec 21 10:36 test.pubkey
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# cat test100.pubkey 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtt0fSFIhcbLMrObFw1nf
rp4HnL8s72RxtIKIrf0rEVRsgHt5AaW/wUFzeIn8nN0xrPwAwJFg2lNj+xBapXxu
61UU1CkLGblpdn1G+/eWWGsgkEw14UCg79Ifc5FLuaStraBOjAEYpXB5ge+KcFXE
IIULBUhBlmgzwXNFIM47ucy484JiwD4dXr3YTDRxWeVs0LMST3RmSJb5rq/ZnZJQ
n3t+wHfrUH8uoHnSpOaWrrLwGxdrNws8jUXFDv+T+63B8QGXjlQFEgs+sxyUo2n1
WO/9Sgop0CvSegjofKBD5bxVJsbrUAkYVD1sXEWhYb6juDLROECtxTfxV78evnW1
IwIDAQAB
-----END PUBLIC KEY-----
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# cat test.pubkey 
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7n9G30qtd+8kr4Z4lFskT5aS+
6/7DYr10k9TI+fgbWBpRbsncwPPQV+YVMn12KYtVoglgIAbDeRTfygS4q8NFqk9k
YRKRlzcBIsVkem5I5P5BM9y02CaYZDohwOniTK5yc886EjBkvTCcglWo2oCcUdjN
8+4ZoQaauoK6T0K72QIDAQAB
-----END PUBLIC KEY-----
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# 
[root@node101.yinzhengjie.org.cn ~/ssl]# openssl rsa -in test100.key -pubout -out test100.pubkey       #从私钥中导出公钥,如果私钥设置的有密码需要验证密码后才能生成公钥文件

7>. 随机数生成器(伪随机数字)

键盘和鼠标,块设备中断
/dev/random:
  仅从熵池返回随机数;随机数用尽,阻塞 /dev/urandom:
  从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
[root@node101.yinzhengjie.org.cn ~]# tr -dc 'a-zA-Z0-9' </dev/urandom       #可以从操纵系统中获取随机数

[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl rand -base64 6            #使用openssl也可以说去随机数
C73Eji13
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl rand -base64 6
yhYfP1qL
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# openssl rand -base64 6
7+2gmWNK
[root@node101.yinzhengjie.org.cn ~]# 

三.使用openssl创建私有CA和证书申请颁发

博主推荐阅读:
    https://www.cnblogs.com/yinzhengjie/p/12075752.html
原文地址:https://www.cnblogs.com/yinzhengjie/p/12075540.html