Dec 5

[译]OpenSSL Command-Line HOWTO 不指定

linuxing , 12:10 , 网络服务 » 安全相关 , 评论(0) , 引用(0) , 阅读(63661) , Via 本站原创 | |

十、Password hashes
使用passwd选项,你可以得到一个类似/etc/passwd或者/etc/shadow格式的密码。
1、创建一个crypt-style密码
引用
$ openssl passwd MySecret
8E4vqBR4UOYF

如果知道已经存在密码的“salt”,可以复制其hash:
引用
$ openssl passwd -salt 8E MySecret
8E4vqBR4UOYF.

否则,即使相同的密码,因每次的hash不同,结果也不同的。
2、创建一个shadow-style的密码
新的Unix系统(包括linux),都使用安全的MD5-based来作为salt,可以这样产生类似的密码:
引用
$ openssl passwd -1 MySecret
$1$HkrAilcM$Jy3vYQc8UiEXfTLRrlSpD.

而slat在二到三$符号之间,所以有:
引用
$ openssl passwd -1 -salt HkrAilcM MySecret
$1$HkrAilcM$Jy3vYQc8UiEXfTLRrlSpD.

十一、Prime numbers(素数)
从0.9.7e之后,prime选项被加入到openssl库中。
1、如何判断一个数字是否prime
使用prime选项即可。需要注意的是,返回的结果是十六进制,而非十进制形式的。
引用
$ openssl prime 119054759245460753
1A6F7AC39A53511 is not prime
$ openssl prime -hex 2f
2F is prime

2、如何创建一组prime numbers
引用
# define start and ending points
AQUO=10000
ADQUEM=10100
for N in $(seq $AQUO $ADQUEM); do
 # use bc to convert hex to decimal
 openssl prime $N | awk '/is prime/ {print "ibase=16;"$1}' | bc
done

十二、随机数
使用rand选项可以得到二进制或base64编码后的随机数:
引用
# write 128 random bytes of base64-encoded data to stdout
openssl rand -base64 128
# write 1024 bytes of binary random data to a file
openssl rand -out random-data.bin 1024
# seed openssl with semi-random bytes from browser cache
cd $(find ~/.mozilla/firefox -type d -name Cache)
openssl rand -rand $(find . -type f -printf '%f:') -base64 1024

从/dev/urandom可以得到类似的种子:
引用
# get 32 bytes from /dev/urandom and base64 encode them
head -c 32 /dev/urandom | openssl enc -base64

十三、S/MIME
S/MIME是发送和接收安全MIME的一个标准,常用于email中。通过OpenSSL的smime选项,可以提供命令行的S/MIME服务。
1、如何校验一个已经签名的S/MIME信息
把收到的信息保存到msg.txt文件即可:
openssl smime -verify -in msg.txt

如果发送人的证书被OpenSSL接受的,可以得到:
引用
Verification successful.

而如果内容被非认证架构修改,会得到错误信息:
引用
Verification failure
23016:error:21071065:PKCS7 routines:PKCS7_signatureVerify:digest
failure:pk7_doit.c:804:
23016:error:21075069:PKCS7 routines:PKCS7_verify:signature
failure:pk7_smime.c:265:

而如果发送人的证书不在OpenSSL的识别范围内,也会出错:
引用
Verification failure
9544:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify
error:pk7_smime.c:222:Verify error:self signed certificate
大部分的邮件客户端,会随信息发送一个公共证书,从命令行也可以看到证书的信息:
openssl smime -pk7out -in msg.txt | \
openssl pkcs7 -text -noout -print_certs

通过下面的命令,得到证书的copy
openssl smime -pk7out -in msg.txt -out her-cert.pem

这样,你就可以再次利用它来验证
openssl smime -verify -in msg.txt -CAfile /path/to/her-cert.pem

2、如何加密一个S/MIME信息
假设某人把她的公共证书发给你,并且要求你加密这些信息才给它。你应保存她的her-cert.pem文件。然后再reply。
为获得the default—though fairly weak—RC2-40 encryption,你应该告诉openssl信息和证书的位置
openssl smime her-cert.pem -encrypt -in my-message.txt

如果你确认对方有robust SSL toolkit,你可以指定一个类似DES的运算法则来加密
openssl smime her-cert.pem -encrypt -des3 -in my-message.txt

当使用sendmail时,可以一并来实现
openssl smime her-cert.pem \
 -encrypt \
 -des3 \
 -in my-message.txt \
 -from 'Your Fullname <you@youraddress.com>' \
 -to 'Her Fullname <her@heraddress.com>' \
 -subject 'My encrypted reply' |\
sendmail her@heraddress.com

3、如何对S/MIME信息签名
如果你不想加密,而只是想签名,可以这样:
openssl smime \
 -sign \
 -signer /path/to/your-cert.pem \
 -in my-message.txt \
 -from 'Your Fullname <you@youraddress.com>' \
 -to 'Her Fullname <her@heraddress.com>' \
 -subject 'My signed reply' |\
sendmail her@heraddress.com

唯一的区别,就是使用你自己的密钥和证书,而非发送者的证书咯。

原文备份:

十四、参考资料
http://www.madboa.com/geek/openssl/
http://blog.csdn.net/wuhuiran/archive/2007/09/13/1783436.aspx
内文分页: [1] [2] [3] [4]
Tags: , , ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]