OpenSSL
私钥及证书
-
生成密钥
# 生成私钥 openssl genrsa -out private.key 1024 # 生成1024位普通私钥,-----BEGIN PRIVATE KEY----- openssl genrsa -des3 -out private.key 1024 # 生成一个1024位的密钥,用DES加密密钥 -----BEGIN ENCRYPTED PRIVATE KEY----- # 加密算法 # - des encrypt the generated key with DES in cbc mode # - des3 encrypt the generated key with DES in ede cbc mode (168 bit key) # - aes128, -aes192, -aes256 encrypt PEM output with cbc aes # 去除密钥的口令 openssl rsa -in private.key # 通过私钥生成公钥 openssl rsa -in private.key -inform pem -pubout -out pubkey.key # 查看密钥信息 openssl rsa -noout -text -in privkey.key # 得到DH:生成和管理Diffie-Hellman参数,Generating DH parameters, 1024 bit long safe prime openssl dhparam -out dh1024.pem 1024
-
证书申请
# 生成证书请求cert.csr,用这个文件去数字证书颁发机构(即CA)申请一个数字证书,CA会给你一个证书文件cacert.pem。 openssl req -new -key private.key -out cert.csr
Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Sichuan Locality Name (eg, city) []:Chengdu Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kugua Yu Le Organizational Unit Name (eg, section) []:Kugua Common Name (e.g. server FQDN or YOUR name) []:*.kugua.com Email Address []:admin@kugua.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
# 如果是自己做测试,生成自签证书cacert.pem,有效期10年 openssl req -new -x509 -key privkey.pem -out cacert.pem -days 3650
-
证书格式
- pkcs1格式的证书,一般是C使用的(标准RSA秘钥对标准规范,未加密)
- pkcs8格式的证书,一般是Java使用的(加密后的秘钥对)
- pkcs12格式的证书,一般是IOS使用的,后缀为.pfx
- 这三种证书可以相关转换。
-
显示模式
openssl x509 -in private.crt -noout -text -modulus openssl rsa -in privatekey-passwd.key -noout -text -modulus
文件加密
-
二进制文件保护(文件内容加密)
-
要使用64位编码打包二进制文件成文本文件,输入:
openssl base64 < filename.bin > filename.txt
-
要打开64位编码的文本文件,输入:
openssl base64 -d < filename.txt > filename.bin
- 注意OpenSSL不会关心文件扩展名。
-
OpenSSL与GnuPG或MIME不一样,它还能对短字符串进行编码,如下:
echo "The Linux Journal" | openssl base64 VGhlIExpbnV4IepvdXJuYWwK
-
解码:
echo "VGhlIExpbnV4IEpvdXJuYWwK" | openssl base64 -d The Linux Journal
-
要使用64位编码打包二进制文件成文本文件,输入:
注意-d选项,它意味着解码。
-
对文件进行校验和
openssl sha1 filename openssl md5 filename
-
文件内容加密
openssl enc -aes-128-cbc < filename > filename.aes-128-cbc enter aes-128-cbc encryption password: Verifying - enter aes-128-cbc encryption password:
与GnuPG一样,OpenSSL要求提供2次密语,并且不会回显到屏幕上。
- 文件解密
解密也比GnuPG更复杂一点:
openssl enc -d -aes-128-cbc -in filename.aes-128-cbc > filename enter aes-128-cbc decryption password:
注意例子中的-d参数,它意味着解密。
-
openssl批量加密文件
#!/bin/bash password="password" file=`find -type f /tmp/test | awk 'NR>1{print $0}'` auto_des_openssl () { expect -c "set timeout -1; spawn -noecho openssl enc -des -e -a -in $2 -out $2.des; expect *password:*; send -- $1\n; set timeout 100; send -- $1\n; interact;" } for i in $file do auto_des_openssl $password $i rm -rf $i #如果不想删除源文件,可以注释掉这一行 done
- 解密文件
openssl enc -des -d -a -in file.des -out file
产生随机密语
openssl rand -base64 15 wGcwstkb8Er0g6w1+Dm+
如果你运行了这个例子,你的输出将与这里的输出不同,因为密语是随机产生的。