| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3619 人关注过本帖
标题:openssl 生成secret key 的简单用法
取消只看楼主 加入收藏
madfrogme
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
 问题点数:0 回复次数:0 
openssl 生成secret key 的简单用法
为了给postfix, apache之类的服务器加上ssl,加强安全系数,

就需要用到Certificate(证书),这个证书可以从官方CA得到

或者自己生成一个,在获得这个证书的过程中,

第一步就是要生成一个Certificate Signing Request (CSR)

这样才可以提交给官方CA来确认你的身份,生成CSR的时候

需要用到的工具是openssl, 只说一下对openssl的感性认识

比如目的是加密一个文件plain.txt

$ cat plain.txt

I love OpenSSL!

1. 首先看看openssl的版本

$ openssl version

OpenSSL 1.0.1c 10 May 2012

2. 然后看openssl里面具体有哪些可用的命令

$ openssl list-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
srp
ts
verify
version
x509

挑两个说明一下

ca To create certificate authorities.

dgst To compute hash functions.

enc To encrypt/decrypt using secret key algorithms. It is possible to generate using a password or directly a secret key stored in a file.

genrsa This command permits to generate a pair of public/private key for the RSA algorithm.

password Generation of “hashed passwords”.

pkcs12 Tools to manage information according to the PKCS #12 standard.

pkcs7 Tools to manage information according to the PKCS #7 standard.

rand Generation of pseudo-random bit strings.

rsa RSA data management.

rsautl To encrypt/decrypt or sign/verify signature with RSA.

verify Checkings for X509.

x509 Data managing for X509.

我们要加密plain.txt要用到 enc 那个命令

然后再看一下openssl里面支持多少种 secret key algorithms

$ openssl list-cipher-commands
aes-128-cbc
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc
aes-256-ecb
base64
......


这时来加密plain.txt文件
3.
$ openssl enc -aes-256-cbc -in plain.txt -out encrypted.bin
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
$

意思就是使用enc命令,利用-aes-256-cbc 加密算法,生成了一个256位的secret key

这个secret key 是通过你提供的password 来计算出来的

生成的文件是encrypted.bin

如果想要解密这个256位的secret key,则

4.
$ openssl enc -aes-256-cbc -d -in encrypted.bin -pass pass:helloI
love OpenSSL!

已经看到, 我刚才提供的password是hello

-d 则表示需要解密

如果这时候我们想产生一对 public/private key 怎么办,还是同样的原理,

只是用了不同的命令

# openssl genrsa -out key.pem 1024

这时就生成了一对1024位的RSA key

来看一下key.pem 的属性
# cat key.pem
-----BEGIN RSA PRIVATE KEY-----
MIICwgIBAAKBlw26l3Kig8s51KAeZvL+MT62dBu9gH0kTZdZ625W3a/4hfV4KLhJ
RGx9v7QSkqpBG2I8qT9uzzqPh3nbeFlOBb1INoyl3MJ4JAsId+Z4NUwrxWxLyVQm
vSd8nn5uEI5tvZvr1xtNkh5qgmn+hfb1EqGZPGCTfQ2sugSHQjodscItMnsteBR0
...
FbU5H93Rc8oQjV1ffZ5kIohEkMSzsAx84Zt3ECbJZAowboSY9f+f0F5m7bzOlrDL
9Nkp18csfJMCTAKa4kF664SvEc/tXNwV/m+2xYXT8sbKm9c9ABBAHmVmxqtlmKoW
LDT0mhozHLYh44/vS+lma+vivgxUei0iiy/bevIz/TlX1elce9M=
-----END RSA PRIVATE KEY-----

# file key.pem
key.pem: PEM RSA private key

还可以用16进制来显示这对RSA key的细节

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

--noout让我们避免使用 base 64 来显示

其实接下来我要们做的是利用key.pem 抽出这一对key

因为我们总是想要private key隐蔽一些, 所以在这里使用triple des(3-des)

来加密secret key

# openssl rsa -in key.pem -des3 -out enc-key.pem
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

对于public key, 无所谓, 因为人们要用publick key来发送他们加密的消息

或者用public key 来确认消息是来自你的

# openssl rsa -in key.pem -pubout -out pub-key.pem


[ 本帖最后由 madfrogme 于 2013-1-24 20:51 编辑 ]
搜索更多相关主题的帖子: 证书 Request secret 
2013-01-23 19:06
快速回复:openssl 生成secret key 的简单用法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016914 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved