linux下openssl命令详解

来源:互联网 发布:学生成绩系统c语言 编辑:程序博客网 时间:2024/06/07 00:11

转自 : http://blog.csdn.net/baidu_36649389/article/details/54379935


目录:

1,openssl命令总览

2,证书应用

3,RSA应用

4,SHA1 应用

5,base64应用

6,des3应用

1,OpenSSl命令总览

语法格式:

openssl command [ command_opts ] [ command_args ]

常用command:

version    用于查看版本信息

enc        用于加解密

ciphers    列出加密套件

genrsa    用于生成私钥

rsa        RSA密钥管理(例如:从私钥中提取公钥)

req        生成证书签名请求(CSR)

crl        证书吊销列表(CRL)管理

ca         CA管理(例如对证书进行签名)

dgst      生成信息摘要

rsautl    用于完成RSA签名、验证、加密和解密功能

passwd    生成散列密码

rand      生成伪随机数

speed      用于测试加解密速度                    

s_client  通用的SSL/TLS客户端测试工具

X509       X.509证书管理

verify      X.509证书验证

pkcs7       PKCS#7协议数据管理



2,证书应用

申请证书

SSL常用于身份验证、数据加密等应用中,要使用SSL,我们密码有自己的证书。数字证书一般要向专业的认证公司(VeriSign)申请,并且都是收费的,某些情况下,我们只是想使用加密的数据通信,而不在乎认证,这时就可以自己制作一个证书,自己制作一个证书,有两种方式,一种是Self Signed,另一种是自己制作一个CA,然后由这个CA,来发布我们需要的证书。下面分别介绍这两个方法。

生成Self Signed证书

 

生成一个key,你的私钥,openssl会提示你输入一个密码,可以输入,也可以不输,

输入的话,以后每次使用这个key的时候都要输入密码,安全起见,还是应该有一个密码保护

#openssl genrsa -des3 -out selfsign.key 4096

 

#使用上面生成的key,生成一个certificate signing request (CSR)

#如果你的key有密码保护,openssl首先会询问你的密码,然后询问你一系列问题,

#其中Common Name(CN)是最重要的,它代表你的证书要代表的目标,如果你为网站申请的证书,就要添你的域名。

#openssl req -new -key selfsign.key -out selfsign.csr

 

#生成Self Signed证书selfsign.crt就是我们生成的证书了

#openssl x509 -req -days 365 -in selfsign.csr -signkey selfsign.key -out selfsign.crt

 

另外一个比较简单的方法就是用下面的命令,一次生成key和证书

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

 

生成自己的CA (Certificate Authority)

CA是证书的发布者,CA可以发布其他人的证书,把CA的证书加入系统信任的根证书后,由CA发布的证书也被系统所信任,所以,CAkey是必须小心保护的,一般都要加密保护,并且限制为root权限读写。

 

生成CAkey

#openssl genrsa -des3 -out ca.key 4096

 

#生成CA的证书

#openssl req -new -x509 -days 365 -key ca.key -out ca.crt

 

#生成我们的keyCSR这两步与上面Self Signed中是一样的

#openssl genrsa -des3 -out myserver.key 4096

#openssl req -new -key myserver.key -out myserver.csr

 

#使用ca的证书和key,生成我们的证书

#这里的set_serial指明了证书的序号,如果证书过期了(365天后)

#或者证书key泄漏了,需要重新发证的时候,就要加1

#openssl x509 -req -days 365 -in myserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out myserver.crt

 

查看证书

#查看KEY信息

#openssl rsa -noout -text -in myserver.key

 

#查看CSR信息

#openssl req -noout -text -in myserver.csr

 

#查看证书信息

#openssl x509 -noout -text -in ca.crt

 

#验证证书

#会提示self signed

#openssl verify selfsign.crt

 

#因为myserver.crt是幅ca.crt发布的,所以会验证成功

#openssl verify -CAfile ca.crt myserver.crt

 

去掉key的密码保护

#有时候每次都要输入密码太繁琐了,可以把Key的保护密码去掉

#openssl rsa -in myserver.key -out server.key.insecure

 

不同格式证书的转换

一般证书有三种格式:

PEM(.pem)前面命令生成的都是这种格式,

DER(.cer .der) Windows上常见

PKCS#12文件(.pfx .p12) Mac上常见

 

# PEM转换为DER

#openssl x509 -outform der -in myserver.crt -out myserver.der

 

# DER转换为PEM

#openssl x509 -inform der -in myserver.cer -out myserver.pem

 

# PEM转换为PKCS

#openssl pkcs12 -export -out myserver.pfx -inkey myserver.key -in myserver.crt -certfile ca.crt

 

# PKCS转换为PEM

#openssl pkcs12 -in myserver.pfx -out myserver2.pem -nodes

 

测试证书

Openssl提供了简单的clientserver工具,可以用来模拟SSL连接,做测试使用。

 

#连接到远程服务器

#openssl s_client -connect www.google.com.hk:443

 

#模拟的HTTPS服务,可以返回Openssl相关信息

# -accept用来指定监听的端口号

# -cert -key用来指定提供服务的key和证书

#openssl s_server -accept 443 -cert myserver.crt -key myserver.key -www

 

#可以将key和证书写到同一个文件中

#cat myserver.crt myserver.key > myserver.pem

#使用的时候只提供一个参数就可以了

#openssl s_server -accept 443 -cert myserver.pem -www

 

#可以将服务器的证书保存下来

#openssl s_client -connect www.google.com.hk:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > remoteserver.pem

#转换成DER文件,就可以在Windows下直接查看了

#openssl x509 -outform der -in remoteserver.pem -out remoteserver.cer

 


3,RSA应用

#产生1024RSA私匙,用3DES加密它,口令为trousers

#输出到文件rsaprivatekey.pem

# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024

 

#从文件rsaprivatekey.pem读取私匙,用口令trousers解密,

#生成的公钥匙输出到文件rsapublickey.pem

# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem

 

#用公钥匙rsapublickey.pem加密文件plain.txt

#输出到文件cipher.txt

# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt

 

#使用私钥匙rsaprivatekey.pem解密密文cipher.txt

#输出到文件plain.txt

# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt

 

#用私钥匙rsaprivatekey.pem给文件plain.txt签名,

#输出到文件signature.bin

# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin

 

#用公钥匙rsapublickey.pem验证签名signature.bin

#输出到文件plain.txt

# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain

 

#X.509证书文件cert.pem中获取公钥匙,

#3DES加密mail.txt

#输出到文件mail.enc

# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem

 

#X.509证书文件cert.pem中获取接收人的公钥匙,

#用私钥匙key.pem解密S/MIME消息mail.enc

#结果输出到文件mail.txt

# openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt

 

# cert.pemX.509证书文件,用私匙key,pemmail.txt签名,

#证书被包含在S/MIME消息中,输出到文件mail.sgn

# openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn

 

#验证S/MIME消息mail.sgn,输出到文件mail.txt

#签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn

# openssl smime -verify -in mail.sgn -out mail.txt



4,消息摘要算法应用例子

#SHA1算法计算文件file.txt的哈西值,输出到stdout

# openssl dgst -sha1 file.txt

 

#SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt

# openssl sha1 -out digest.txt file.txt

 

#DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin

#签名的private key必须为DSA算法产生的,保存在文件dsakey.pem

# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt

 

#dss1算法验证file.txt的数字签名dsasign.bin

#验证的private keyDSA算法产生的文件dsakey.pem

# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt

 

#sha1算法为文件file.txt签名,输出到文件rsasign.bin

#签名的private keyRSA算法产生的文件rsaprivate.pem

# openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt

 

#sha1算法验证file.txt的数字签名rsasign.bin

#验证的public keyRSA算法生成的rsapublic.pem

# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt



5,base64应用

#对字符abc进行base64编码

#echo abc | openssl base64

结果为:YWJjCg==


#对YWJjCg==解码

#echo YWJjCg== | openssl base64 -d

结果为:abc


#对文件t.txt进行base64编码

#openssl base64 -in t.txt

结果为:aGVsbG8K


#对aGVsbG8K进行解码

#echo aGVsbG8K | openssl base64 -d

结果为:abc


#对t.txt进行编码并将结果输出到t.base64文件里

#openssl base64 -in t.txt -out t.base64


#若编码值存放在t.base64文件里,对其进行解码

#openssl base64 -d -in t.base64

结果为abc



6,des3应用

# 对称加密应用例子
# 用DES3算法的CBC模式加密文件plaintext.doc,
# 加密结果输出到文件ciphertext.bin
# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin

# 用DES3算法的OFB模式解密文件ciphertext.bin,
# 提供的口令为trousers,输出到文件plaintext.doc
# 注意:因为模式不同,该命令不能对以上的文件进行解密
# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers

# 用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取
# 输出到文件ciphertext.bin
# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD

*******************************

未完待续

*******************************


原创粉丝点击