前言:
在实际项目开发中常常需要用到非对称性加密算法生成公私钥应用于加密与认证、服务器间ssh免密等(关于非对称性加密算法生成公私钥等笔者之前有发表过一篇有趣的文章,感兴趣的朋友可以去了解下),生成公私钥的方式有很多,本文以RSA算法为例来讨论多种生成公私钥方式。
OpenssL
OpenSSH的ssh-keygen
GnuPG的gpg
** 一、OpenSSL**
OpenSSL是用于应用程序的软件库,该应用程序可保护计算机网络上的通信免遭窃听或需要识别另一方的身份,是SSL和TLS协议的开源实现。
加密步骤:
1.生成私钥*.pem(传统格式)
openssl genrsa -out rsa_private_key.pem 1024
2.对私钥进行PKCS#8编码(在密码学中PKCS代表“公钥密码学标准”。这些是RSA Security LLC于1990年代初开始设计和发布的一组公共密钥加密标准。PKCS#8规定了存储私钥信息的标准语法)
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt > rsa_private_key_pkcs8.pem
3.根据私钥生成对应的公钥:
openssl rsa -in rsa_private_key.pem -out rsa_public_key_1024.pub -pubout
**二、OpenSSH的ssh-keygen **
OpenSSH是基于安全外壳SSH协议的一组安全网络实用程序,可在客户端-服务器体系结构中的不安全网络上提供安全通道,可以替代Telnet和FTP等未加密协议。
使用步骤如下:
1.执行指令
ssh-keygen -t rsa
2.几次回车默认后便生成了公私钥对
三、GnuPG的gpg
GNU Privacy Guard隐私保护,简称(GnuPG的或GPG),是一种是一种混合加密软件程序。因为它结合了传统的对称密钥加密技术来提高速度,并使用公共密钥加密技术来简化安全密钥交换。
使用步骤如下:
1.由于默认已经安装GPG,故直接输入“gpg --gen-key”并按回车键执行,然后输入“1”选择密钥种类,然后回车。
[root@manager16 ~]# gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: 已创建目录‘/root/.gnupg’
gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/root/.gnupg/pubring.gpg’已建立
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择? 1
2.选择加密算法。默认选择第一个选项,表示加密和签名都使用RSA算法。这里输入13.询问密钥对位数,默认为2048,本例中手动输入1024.
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)
您所要求的密钥尺寸是 2048 位
3.提示输入密钥对有效期,输入“0”(永不过期)并按回车键确定。
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
4.示将永不过期,输入“y”确认。
密钥永远不会过期
以上正确吗?(y/n)y
5.输入密钥对名称(本例中为cheshi)。
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <[email protected]>"
真实姓名:lcfc_xuhuan
6.依次输入邮件地址和备注。
电子邮件地址:huan2.xu@*****.com
7.询问是否修改或者确认,直接输入“o”确认。
注释:gpg encrypt
您选定了这个用户标识:
“lcfc_xuhuan (gpg encrypt) <[email protected]>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O
您需要一个密码来保护您的私钥。
8.提示输入私钥密码短语
9、再次输入后系统需要时间生成密钥对,期间最好随机输入字符或移动鼠标等,有助于生成密钥对,结果如下图
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 66FE4F83 被标记为绝对信任
公钥和私钥已经生成并经签名。
gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
pub 2048R/66FE4F83 2022-10-11
密钥指纹 = 4CEE 73B2 77CA D072 E478 0ED0 7005 D29E 66FE 4F83
uid lcfc_xuhuan (gpg encrypt) <[email protected]>
sub 2048R/E10948D1 2022-10-11
10、分别导出公私钥
导出公钥
[root@manager16 .gnupg]# gpg -a --export lcfc_xuhuan > lcfc_xuhuan_pub.asc
导出私钥
[root@manager16 .gnupg]# gpg -a --export-secret-keys lcfc_xuhuan > lcfc_xuhuan_keys.asc
四、区别
1.OpenSSH 与 OpenSSL有什么关联?
OpenSSH常常被误认以为与OpenSSL有关联,但实际上这两个计划有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。
2、SSH、SSL、TSL的区别是什么?
SSL(Secure Socket Layer--安全套接字层):为网络通信安全以及数据完整性提供保障的一种安全协议,在TCP/IP的传输层对网络连接进行加密;
TSL(Transport Layer Security--传输层安全):为SSL 3.0的后继版本,TSL与SSL 3.0的显著差别在于加密算法不同,TSL的主要目的是使SSL更加安全,使协议的规范更加精确和完善,在TCP/IP的传输层对网络连接进行加密;
SSH(Secure Shell):由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
五、总结
OpenSSH是SSH协议的具体实现、OpenSSL是SSL与TSL的具体实现。OpenSSH 与OpenSSL只是名字相似但是关联不大,同样软件发展目标是为提供开放源代码的加密通讯软件。而生成非对称公私钥的方式有很多,如上面列举出的OpenSSH 、OpenSSL与GnuPG。三者生成的公私钥的区别在于OpenSSH ssh-keygen ssh-keygen 输出的RSA密钥文件的版本较旧, 这种比较旧文件格式不同于PKCS#8标准. 但是openssl支持这种旧版密钥格式。
版权归原作者 Xu-小安安 所有, 如有侵权,请联系我们删除。