OpenSSL主要依赖着两个库文件

libcrypto加解密相关

libssl 主要是SSL网站

[root@CentOS CA]# rpm -qlopenssl | grep "/usr/"lib64
/usr/lib64/.libcrypto.so.1.0.1e.hmac
/usr/lib64/.libcrypto.so.10.hmac
/usr/lib64/.libssl.so.1.0.1e.hmac
/usr/lib64/.libssl.so.10.hmac
/usr/lib64/libcrypto.so.1.0.1e
/usr/lib64/libcrypto.so.10
/usr/lib64/libssl.so.1.0.1e
/usr/lib64/libssl.so.10

OpenSSL加解密方法示例

加密 

1)openssl enc -des3 -in inittab –e
[root@CentOSOpenssl]# openssl enc -des3 -in inittab -e 
enter des-ede3-cbc encryptionpassword:
Verifying - enterdes-ede3-cbc encryption password:   这的密码必须输入
2)将加密信息保存到文件中
[root@CentOSOpenssl]# openssl enc -des3 -in inittab -e -out inittab.txt
enter des-ede3-cbc encryptionpassword:
Verifying - enterdes-ede3-cbc encryption password:
[root@CentOS Openssl]# catinittab.txt 
Salted__;4F?攒&Xǚlk
3) dgst 单向加密他可以跟如下算法参数示例
Message Digest commands (seethe `dgst' command for more details)
md2md4md5 rmd160shasha1
 
[root@CentOS Openssl]# openssl dgst -md5 fstab 
MD5(fstab)=9a3270848cc8d24e661a192e2a39a181
[root@CentOS Openssl]# md5sum fstab 
9a3270848cc8d24e661a192e2a39a181  fstab
4) rand 产生随机数
[root@CentOS Openssl]#openssl rand -hex 4
7556a695
[root@CentOS Openssl]#openssl rand -base64 4
KKYIPA==

生成密钥

1)生成私钥
[root@CentOS key]#(umask 077;openssl genrsa -out mykey.key 2048)
Generating RSA private key,2048 bit long modulus
..............+++
....+++
e is 65537 (0x10001)
[root@CentOS key]# ll
total 4
-rw-------. 1 root root 1679 Oct 18 22:28 mykey.key
2)提取公钥
 
[root@CentOS key]# opensslrsa -in mykey.pri -pubout -out mykey.csr
writing RSA key

建立CA证书颁发机构

配置文件
dir             = /etc/pki/CA           # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allowcreation of
                                        #several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.
 
certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # mustbe commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key 
RANDFILE        = $dir/private/.rand    # private random number file
 
x509_extensions = usr_cert
1)生成私钥
[root@CentOSprivate]# (umask 077;openssl genrsa -out cakey.pem 2048)
Generating RSA private key,2048 bit long modulus
..................................................................................+++
................................+++
e is 65537 (0x10001)
[root@CentOS private]# ll
total 4
-rw-------. 1 root root 1679Oct 18 22:49 cakey.pem
 
 
2)建立CA自签证书
[root@CentOS CA]# openssl req-new -x509 -key private/cakey.pem -out cacert.pem -days 365
You are about to be asked toenter information that will be incorporated
into your certificaterequest.
What you are about to enteris what is called a Distinguished Name or a DN.
There are quite a few fieldsbut you can leave some blank
For some fields there will bea default value,
If you enter '.', the fieldwill be left blank.
-----
Country Name (2 letter code)[XX]:CN
State or Province Name (fullname) []:CQ
Locality Name (eg, city)[Default City]:chongqing
Organization Name (eg,company) [Default Company Ltd]:HT
Organizational Unit Name (eg,section) []:haitian
Common Name (eg, your name oryour server's hostname) []:www.haitian.com
Email Address []:
You have new mail in/var/spool/mail/root
[root@CentOS CA]# ll
total 20
-rw-r--r--. 1 root root 1318Oct 18 22:57 cacert.pem
drwxr-xr-x. 2 root root 4096Apr  8 2014 certs
drwxr-xr-x. 2 root root 4096Apr  8 2014 crl
drwxr-xr-x. 2 root root 4096Oct 18 20:44 newcerts
drwx------. 2 root root 4096Oct 18 22:49 private\
3)创建证书记录
[root@CentOS CA]# touchindex.txt serial
[root@CentOS CA]# echo 01> serial
用户向CA申请证书 (以当前CA模拟为客户端)
1)创建私钥
[root@CentOS key]# (umask077;openssl genrsa -out client.pri)
Generating RSA private key,1024 bit long modulus
.......++++++
.................................++++++
e is 65537 (0x10001)
[root@CentOS key]# ll
total 4
-rw-------. 1 root root 887Oct 18 23:04 client.pri
2)创建证书申请请求
[root@CentOS key]# opensslreq -new -key client.pri -out client.csr -days 365
You are about to be asked toenter information that will be incorporated
into your certificaterequest.
What you are about to enteris what is called a Distinguished Name or a DN.
There are quite a few fieldsbut you can leave some blank
For some fields there will bea default value,
If you enter '.', the fieldwill be left blank.
-----
Country Name (2 letter code)[XX]:CN
State or Province Name (fullname) []:CQ
Locality Name (eg, city)[Default City]:chongqing
Organization Name (eg,company) [Default Company Ltd]:HT
Organizational Unit Name (eg,section) []:hiteam
Common Name (eg, your name oryour server's hostname) []:www.hiteam.com 
Email Address []:
 
Please enter the following'extra' attributes
to be sent with yourcertificate request
A challenge password []:
An optional company name []:
You have new mail in/var/spool/mail/root
[root@CentOS key]# ll
total 8
-rw-r--r--. 1 root root 643Oct 18 23:08 client.csr
-rw-------. 1 root root 887Oct 18 23:04 client.pri
3)将客户的证书申请请求文件发送到CA服务器上签署证书申请请求
[root@CentOS key]# openssl ca-in /root/Openssl/key/client.csr -out client.crt -days 365
Using configuration from/etc/pki/tls/openssl.cnf
Check that the requestmatches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Oct 18 15:15:56 2014GMT
            Not After : Oct 18 15:15:56 2015GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = CQ
            organizationName          = HT
            organizationalUnitName    = hiteam
            commonName                = www.hiteam.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
               DE:9D:97:81:E9:5F:06:85:7C:1F:48:E0:B8:09:E5:31:59:30:BC:BC
            X509v3 Authority Key Identifier: 
               keyid:35:D3:05:74:A7:FC:3F:60:C6:A4:63:7C:B7:EF:9B:CE:28:FA:5D:42
 
Certificate is to becertified until Oct 18 15:15:56 2015 GMT (365 days)
Sign the certificate? [y/n]:y
 
 
1 out of 1 certificaterequests certified, commit? [y/n]y
Write out database with 1 newentries
Data Base Updated
4)查看证书是否签署成功
[root@CentOS key]# ll
total 12
-rw-r--r--. 1 rootroot 3687 Oct 18 23:16 client.crt
-rw-r--r--. 1 root root  647 Oct 18 23:14 client.csr
-rw-------. 1 root root  887 Oct 18 23:04 client.pri
查看/etc/pki/CA里文件变化
[root@CentOS CA]# ll
total 36
-rw-r--r--. 1 root root 1318Oct 18 22:57 cacert.pem
drwxr-xr-x. 2 root root 4096Apr  8 2014 certs
drwxr-xr-x. 2 root root 4096Apr  8 2014 crl
-rw-r--r--. 1 root root   73 Oct 18 23:16 index.txt
-rw-r--r--. 1 root root   21 Oct 18 23:16 index.txt.attr
-rw-r--r--. 1 root root    0 Oct 18 22:59 index.txt.old
drwxr-xr-x. 2 root root 4096Oct 18 20:44 newcerts
drwx------. 2 root root 4096Oct 18 22:49 private
-rw-r--r--. 1 root root    3 Oct 18 23:16 serial
-rw-r--r--. 1 root root    3 Oct 18 22:59 serial.old
[root@CentOS CA]# catindex.txt
V   151018151556Z     01  unknown    /C=CN/ST=CQ/O=HT/OU=hiteam/CN=www.hiteam.com
[root@CentOS CA]# catindex.txt.attr 
unique_subject = yes
[root@CentOS CA]# cat serial
02
[root@CentOS CA]# catserial.old 
01

使用脚本实现创建私钥,生成证书申请请求,签署证书;

#!/bin/bash
read -p "Please Inputyour Request:" Req
private () {
  if [ $Req == private ];then
    read -p "Please Input your private keylong{1024|2048|4096...}:" Long
    read -p "Please Input your keyname:" Name
    (umask 077;openssl genrsa -out $Name.pri$Long)
  fi    
}
csr () {
  if [ $Req == csr ];then
    read -p "Please Input your private keypath:" Path
        
    read -p "Please input your Certificatesigning request name:" Name
    openssl req -new -key $Path.pri -out$Name.csr
  fi    
}
CA () {
   if [ $Req == CA ];then
     read -p "Please Input yourCertificate request:" Certi
     read -p "Please your Certificate savepath:" Save
     openssl ca -in $Certi.csr -out $Save,crt-days 365 
   fi    
}
 
case $Req in
private) 
  private;;
csr)  
csr
;;
CA)
CA;;
*)
echo"Usage:{private|csr|CA}
;;
esac

此文档下载地址:http://down.51cto.com/data/1884840