前言 来了解一下openssl这个工具的基础命令的使用。
主要部分是根据https://wiki.openssl.org/index.php/Command_Line_Utilities
这个文档来描述的。
openssl命令 命令格式 1 2 3 openssl command [ command_options ] [ command_arguments ]
素数生成 1 2 3 4 // 生成24位的一个素数 openssl prime -generate -bits 24
获取帮助 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 openssl help openssl command -help openssl genpkey -help Usage: genpkey [options] Valid options are: -help Display this summary -out outfile Output file -outform PEM|DER output format (DER or PEM) -pass val Output file pass phrase source -paramfile infile Parameters file -algorithm val The public key algorithm -pkeyopt val Set the public key algorithm option as opt:value -genparam Generate parameters, not key -text Print the in text -* Cipher to use to encrypt the key -engine val Use engine, possibly a hardware device Order of options may be important! See the documentation.
版本信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 root@keep-VirtualBox:/usr/local/lib# openssl version GmSSL 2.5.4 - OpenSSL 1.1.0d 19 Jun 2019 # 这里显示GmSSL是因为机子上面安装了GmSSL, 默认会替换openssl程序。 GmSSL是openssl的超集,额外实现了国密算法 root@keep-VirtualBox:/usr/local/lib# root@keep-VirtualBox:/usr/local/lib# openssl version -help Usage: version [options] Valid options are: -help Display this summary -a Show all data -b Show build date -d Show configuration directory -e Show engines directory -f Show compiler flags used -o Show some internal datatype options -p Show target build platform -v Show library version root@keep-VirtualBox:/usr/local/lib#
生成RSA 私钥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 生成私钥并且使用aes256加密 openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private-key.pem # 列出可用于加密的算法 openssl list -cipher-algorithms # 读取私钥并且以文本形式显示 openssl pkey -in private-key.pem -text # 指定对称密钥 -pass pass:123456, 就可以不会手动输入了 openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private-key.pem -pass pass:123456
生成公钥 1 2 3 4 5 6 7 8 9 # 根据私钥生成公钥 openssl pkey -in private-key.pem -out public-key.pem -pubout # 读取公钥并且以文本形式显示 openssl pkey -in public-key.pem -pubin -text
基于椭圆曲线生成key 分为两步: 1、生成参数 2、使用参数生成key
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 获取支持的椭圆曲线列表 openssl ecparam -list_curves # 生成椭圆曲线参数输出到文件中 openssl ecparam -name prime256v1 -out prime256v1.pem # 读取参数文件并以文本显示 openssl ecparam -in prime256v1.pem -noout -text # 读取参数文件并以C语言格式显示 openssl ecparam -in prime256v1.pem -noout -C # 根据参数文件生成私钥文件 openssl genpkey -aes256 -paramfile prime256v1.pem -out private-key.pem # 使用genpkey基于EC直接生成私钥, 效果同上 openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 # 使用genpkey直接生成私钥 并使用aes256加密 openssl genpkey -aes256 -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out private-key.pem
Base64编码字符串 1 2 3 4 5 6 # 编码 openssl base64 -e <<< 'Welcome to openssl wiki' # 解码 openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'
生成文件摘要 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 $ openssl dgst -md5 primes.dat MD5(primes.dat)= 7710839bb87d2c4c15a86c2b2c805664 $ openssl dgst -sha1 primes.dat SHA1(primes.dat)= 5dfab70ce825591689f4a3f65910870a9022cd32 $ openssl dgst -sha384 primes.dat SHA384(primes.dat)= 41399bdffe6850f5a44852d967f3db415654f20dc2eb6cd231772f6ea411876d85d44091ebbc6b1f4ce8673e64617271 # 列举支持的摘要算法 openssl list -digest-algorithms # 列举支持的摘要命令 openssl list -digest-commands $ openssl md5 primes.dat MD5(primes.dat)= 7710839bb87d2c4c15a86c2b2c805664 $ openssl sha1 primes.dat SHA1(primes.dat)= 5dfab70ce825591689f4a3f65910870a9022cd32 $ openssl sha384 primes.dat SHA384(primes.dat)= 41399bdffe6850f5a44852d967f3db415654f20dc2eb6cd231772f6ea411876d85d44091ebbc6b1f4ce8673e64617271
文件加解密 1 2 3 4 5 6 7 8 # 获取支持加解密的算法 命令1 openssl enc -ciphers # 获取支持加解密的算法 命令2 openssl list -cipher-algorithms
选项 -e, -d 分别表示加密和解密 选项 -iter 表示密钥派生的轮数,越大算法强度就越强 -pbkdf2 一起用。-salt随机生成因子作用于派生函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 使用aes-256-cbc 加密文件,密码 123456 openssl enc -aes-256-cbc -e -iter 1000 -salt -in primes.dat -out primes.enc -k 123456 # 解密 openssl enc -aes-256-cbc -d -iter 1000 -in primes.enc -out primes.dec openssl enc -aes128 -pass pass:123456 -iter 10 -d -in aes128.enc -out aes128.dec # Des3算法: # 加密: openssl enc -e -des3 -a -salt -in fstab -out fstab.des3 # 解密: openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab
摘要、签名与验证 1 2 3 4 5 6 7 8 9 10 openssl dgst -md5 -hex file.txt # 使用rsa生成的私钥加密后 再计算签名 openssl dgst -sha256 -sign privatekey.pem -out signature.sign file.txt # 验证签名 openssl dgst -sha256 -verify publickey.pem -signature signature.sign file.txt
其他命令 使用openssl help 可以看到分组列出的命令。
也可以使用man openssl 查看帮助。
GmSSL的编译 需要一些国密算法的学习,必须要用到GmSSL库了。
1 2 3 4 5 6 7 8 9 git clone https://github.com/guanzhi/openssl.git cd openssl ./config no-shared no-asm # 使用静态编译,避免openssl与系统原有的openssl相覆盖 make -j 12 make install # no-asm 解决 EC_GFp_sm2z256_method undefined的问题
更多 今年新工作刚开始学习信息安全技术,一堆的术语算法,刚上来就整懵了我。每天花了一些时间,循序渐进地学习,慢慢的上道了,活到老学到老,不然要被淘汰掉了。一万小时定律不是吹的,功夫花在哪里,成就就在哪里。
这个文章简要整理了一些openssl常用的基础命令,后面便于翻查。
五一的时候新入手了一个27寸的dell显示屏,屏幕大看起来就是爽哈!工欲善其事必先利其器, done!
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。
博客地址: https://fishmwei.github.io/ 掘金主页: https://juejin.cn/user/2084329776486919