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 编辑 ]