导读:在实际项目开发中常常需要用到非对称性加密算法生成公私钥应用于加密与认证、服务器间ssh免密等(关于非对称性加密算法生成公私钥等笔者之前有发表过一篇有趣的文章,感兴趣的朋友可以去了解下),生成公私钥的方式有很多,本文以RSA算法为例来讨论多种生成公私钥方式。

  • OpenssL
  • OpenSSH的ssh-keygen
  • GnuPG的gpg

一、OpenSSL

OpenSSL是用于应用程序的软件库,该应用程序可保护计算机网络上的通信免遭窃听或需要识别另一方的身份,是SSL和TLS协议的开源实现。




xcode生成的公钥私钥 基于公钥生成私钥_传输层


使用步骤如下:

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


xcode生成的公钥私钥 基于公钥生成私钥_ssh key生成_02


OpenSSH是基于安全外壳SSH协议的一组安全网络实用程序,可在客户端-服务器体系结构中的不安全网络上提供安全通道,可以替代Telnet和FTP等未加密协议。

使用步骤如下:

1.执行指令

ssh-keygen -t rsa

2.几次回车默认后便生成了公私钥对


xcode生成的公钥私钥 基于公钥生成私钥_xcode生成的公钥私钥_03


三、GnuPG的gpg


xcode生成的公钥私钥 基于公钥生成私钥_ssh key生成_04


GNU Privacy Guard隐私保护,简称(GnuPG的或GPG),是一种是一种混合加密软件程序。因为它结合了传统的对称密钥加密技术来提高速度,并使用公共密钥加密技术来简化安全密钥交换。

使用步骤如下:

1.由于默认已经安装GPG,故直接输入“gpg --gen-key”并按回车键执行,然后输入“1”选择密钥种类,然后回车。


xcode生成的公钥私钥 基于公钥生成私钥_传输层_05


2.选择加密算法。默认选择第一个选项,表示加密和签名都使用RSA算法。这里输入13.询问密钥对位数,默认为2048,本例中手动输入1024.


xcode生成的公钥私钥 基于公钥生成私钥_SSL_06


3.提示输入密钥对有效期,输入“0”(永不过期)并按回车键确定。


xcode生成的公钥私钥 基于公钥生成私钥_SSL_07


4.示将永不过期,输入“y”确认。


xcode生成的公钥私钥 基于公钥生成私钥_xcode生成的公钥私钥_08


5.输入密钥对名称(本例中为cheshi)。


xcode生成的公钥私钥 基于公钥生成私钥_ssh key生成_09


6.依次输入邮件地址和备注。


xcode生成的公钥私钥 基于公钥生成私钥_SSL_10


7.询问是否修改或者确认,直接输入“o”确认。


xcode生成的公钥私钥 基于公钥生成私钥_ssh key生成_11


8.提示输入私钥密码短语


xcode生成的公钥私钥 基于公钥生成私钥_xcode生成的公钥私钥_12


9、再次输入后系统需要时间生成密钥对,期间最好随机输入字符或移动鼠标等,有助于生成密钥对,结果如下图


xcode生成的公钥私钥 基于公钥生成私钥_密钥对_13


10、分别导出公私钥

导出公钥


xcode生成的公钥私钥 基于公钥生成私钥_xcode生成的公钥私钥_14


导出私钥


xcode生成的公钥私钥 基于公钥生成私钥_ssh key生成_15


四、区别


xcode生成的公钥私钥 基于公钥生成私钥_密钥对_16


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 协议可以有效防止远程管理过程中的信息泄露问题。


xcode生成的公钥私钥 基于公钥生成私钥_xcode生成的公钥私钥_17


五、总结

OpenSSH是SSH协议的具体实现、OpenSSL是SSL与TSL的具体实现。OpenSSH 与OpenSSL只是名字相似但是关联不大,同样软件发展目标是为提供开放源代码的加密通讯软件。而生成非对称公私钥的方式有很多,如上面列举出的OpenSSH 、OpenSSL与GnuPG。三者生成的公私钥的区别在于OpenSSH ssh-keygen ssh-keygen 输出的RSA密钥文件的版本较旧, 这种比较旧文件格式不同于PKCS#8标准. 但是openssl支持这种旧版密钥格式。