15 security ssh ssh-agent public-key-encryption
如果有的话,SSH 密钥与用于其他目的(例如电子邮件签名)的非对称密钥有何不同?
我被提示问这个,部分是因为在 OS X 上,有可用于管理 SSH 密钥的应用程序(ssh-agent、SSHKeychain 等)以及旨在管理 GPG 密钥的应用程序(GPG Keychain Access 等),显然,两人从未见面。但是,我不认为这是 OS X 特定的问题。
这种关注点分离是因为密钥的种类完全不同,还是因为它们存储在不同的地方,还是出于其他原因或原因的组合,例如历史原因?
use*_*686 16
SSH 密钥只是普通的 RSA、DSA 或 ECDSA 非对称密钥对。OpenSSH 生成的这样一个密钥对已经可以被 OpenSSL 和大多数其他程序使用。
(.pub
由ssh-keygen
OpenSSH输出的文件是特定于 OpenSSH 的格式,但这无关紧要,因为“私有”文件已经包含私钥和公钥。)
其他 SSH 软件可能有自己的存储格式,例如RFC 4716或 PuTTY 的PPK,但它们存储相同的 RSA/DSA/ECDSA 信息。
X.509(由 SSL、S/MIME 使用)稍微复杂一些:“私有”密钥仍然相同,但您拥有一个“证书”——一个包含公钥、主题和发行人名称、有效期。在 X.509 v3 证书中,将出现“密钥用法”和“备用主题名称”等扩展名。整个证书由颁发者的密钥签名(如果没有单独的颁发者,则自签名)。
您可以轻松地为 SSH 使用 X.509“私钥”文件——OpenSSH 甚至使用相同的格式。
您可以从一个简单的密钥对创建一个 X.509 证书,然后对其进行自签名,或者您可以创建一个“证书请求”并将其提交给 CA(认证机构)进行签名。
要显示 X.509 证书中的信息,请使用:
certtool -i < foo.pem
certtool -i --inder < foo.crt
openssl x509 -noout -text < foo.pem
openssl x509 -noout -text -inform der < foo.crt
Run Code Online (Sandbox Code Playgroud)
(certtool
是 GnuTLS 的一部分。)
OpenPGP(由 GPG 使用)密钥是最复杂的。您所说的“PGP 密钥”或“PGP 密钥对”是一种称为“OpenPGP 证书”的复杂结构,其中包含:
所有密钥对都有到期日期和使用位:签署数据、验证(签署)密钥、加密、验证服务。默认情况下,主密钥具有“签名”和“认证”位,第一个子密钥是“加密”。如果添加“身份验证”子项,则可以将其gpg-agent
用于 SSH 身份验证。
要查看您的证书包含的内容:
gpg --export joe@example.com | gpg -vv
gpg --export joe@example.com | certtool --pgp-certificate-info
Run Code Online (Sandbox Code Playgroud)
(certtool
是 GnuTLS 的一部分。)
X.509 证书及其关联的私钥有多种格式:
DER是证书的 ASN.1 结构的二进制编码。此类文件通常具有.crt
或.cer
文件扩展名(.der
不太常见但并非看不见)。
“PEM”格式文件包含相同的 DER 编码数据,但另外使用 Base64 进行编码,并在“BEGIN THIS”和“END THAT”标头之间进行编码。一个常见的文件扩展名是.pem
,虽然两者.crt
并.cer
有时也在这里(但从未使用.der
)。
对于属于证书的私钥,通常使用“PEM”格式 – Base64 被标题“BEGIN PRIVATE KEY”(PKCS#7 结构中的密钥)或“BEGIN RSA (或 DSA) PRIVATE KEY”(裸密钥,OpenSSL )包围格式)。有时密钥在一个单独的.key
文件中,有时它与证书捆绑在一起。
PKCS#12和稍旧的PFX是加密容器,存储证书和私钥(通常也是颁发者的证书)。大多数软件在使用私钥导出或“备份”证书时使用这种格式。
在 OpenPGP 中不太容易混淆的情况:所有数据都遵循相同的二进制格式,并且可以选择“装甲”(使用 Radix64 编码并在 PEM 类标头之间)。
归档时间: |
|
查看次数: |
3384 次 |
最近记录: |