证书学习(二)搞懂 keystore、jks、p12、pfx、cer、crt、csr、pem、key文件的区别

一、背景

我们在日常的开发过程中,经常会见到各种各样的证书相关类型的文件,错综复杂。

其实 keystorejksp12pfxcrtcsrpem 这些文件类型都是在处理加密和认证过程中常见的文件格式,每种文件都有其特定的用途和格式,我们下面来对这几种类型进行简要说明。


二、文件格式的区分

2.1 .keystore / .jks 文件

  • 格式:.keystore.jks(Java Keystore)Java 密钥库系统的默认格式
  • 内容: 私钥、公钥证书,以及可能的其他证书链。
  • 用途: 主要用于 Java 应用程序的安全配置,如 Web 服务器的身份验证。
  • 示例命令:
# .keystore文件
keytool -genkey -alias myalias -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.keystore
# .jks文件
keytool -genkey -alias myalias -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.jks
  • 示例内容:
    在这里插入图片描述

2.2 .p12 / .pfx 文件

  • 格式: PKCS#12一种跨平台的标准格式
  • 内容: 私钥、证书和证书链。
  • 用途: 用于多种环境,不仅限于 Java,还可以用于 .NET 应用、IOS 应用等。
  • 示例命令:
keytool -importkeystore -srckeystore bo.keystore -srcalias www.bo.org -destkeystore bo.p12 -deststoretype pkcs12
  • 示例内容:
    在这里插入图片描述

2.3 .cer/.crt 文件

  • 格式: 通常用于 存储 X.509 格式的公钥证书
  • 内容: 只包含 DER格式、或 PEM格式 的公钥证书。
  • 用途: 用于安装到 Web 服务器上,以便向客户端证明服务器的身份。
  • 示例命令:
# 方式一
keytool -exportcert -keystore d:\keystore\bo.keysotre -alias www.bo.org -file d:\keystore\bo.crt
# 方式二
openssl x509 -in cert.pem -outform PEM -out cert.crt
  • 示例内容:
    在这里插入图片描述

2.4 .csr 文件

  • 格式: CSR(Certificate Signing Request)一个证书签名请求文件
  • 内容: 公钥和一些标识信息,用于向证书办法机构申请证书。
  • 用途: 用于向证书颁发机构提交证书申请。
  • 示例命令:
# 方式一
keytool -certreq -alias www.bo.org -keystore d:\keystore\bo.keystore -file d:\keystore\cert.csr
# 方式二
openssl req -new -key key.pem -out request.csr
  • 示例内容:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIC0TCCAbkCAQAwXDELMAkGA1UEBhMCY24xCzAJBgNVBAgTAmJqMQswCQYDVQQHEwJiajEOMAwG
A1UEChMFYmFpZHUxDjAMBgNVBAsTBWJhaWR1MRMwEQYDVQQDEwp3d3cuYm8ub3JnMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi/hPQzbQLVmB80DYRq2EJKhcxw4slpGubM6jIBX0rfXQ
fFN9+mMGQQ9A8Vs60dLw0lJBUarleag9ZNYsAv68aG4ZLtEW9R6q7GF3bFB0kKA94sQofcR9i50H
LDXyni/njZCvWY1NVYLEW6cJOEO4PY/D8LMDDbhCz7ivepxPsOiZmFKwkflZWTQBqXsc0DBOsa1n
tDvZX1c8L6LyhYOCwqir9Q6ImUXDWgLX+MvXWBsgYS5CLzPpHS3kBYCjKIMLEk/R4RtePIuRHWCw
PCi05Vmww6p9zxtYnf1MgP0YdpEhy9sOBK+XMMroddQc99X7HxFORm0eA0DsN5X41OGBGwIDAQAB
oDAwLgYJKoZIhvcNAQkOMSEwHzAdBgNVHQ4EFgQUwOcgB0hDeERIiANWXidDwnrK+FowDQYJKoZI
hvcNAQELBQADggEBAFk2EwCoHwk9QcYeOaEHGDfeRyC7M/0gMkc4EKzz7n2X6l8xOHcM8dMFLyh8
c4o/Lp3gS0lo+fbEFF8VXUmqY/S9lqrzja9w/PndiMcTqF2KdsfNFnU0L16e/E10zK2/2HmDwhPt
fAAvQ/8s8NYN5DG1gS+gvWBlaRY40iARiqaevJdgmD0c4Mvsxl9BphQR58qN13+eheuA9iLojrgR
KegIymB2wq1vBX9RnRFr6wDDuhZ7YEIBLnuHd1aCPtxuGuU9Pp2E0gWp5QjVmSGic/mrJ/bS6IfZ
5LNxW44TDlKmPOTnlPGIDEeJq9A7qsOECCHYMvibgrEbTSPDRMD8r7I=
-----END NEW CERTIFICATE REQUEST-----

2.5 .pem 文件

  • 格式: PEM(Privacy Enhanced Mail)一种通用的 ASCII 编码的密钥和证书格式
  • 内容: 公钥、私钥或者证书, 通常用于 OpenSSL 中。
  • 用途: 广泛用于各种安全协议和应用程序中,包括 SSL/TLS
  • 示例命令:
openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem
  • 示例内容:
-----BEGIN CERTIFICATE-----
MIIDcjCCAlqgAwIBAgIEMAdjIzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJj
bjELMAkGA1UECBMCYmoxCzAJBgNVBAcTAmJqMQ4wDAYDVQQKEwViYWlkdTEOMAwG
A1UECxMFYmFpZHUxDTALBgNVBAMTBHRlc3QwHhcNMjQwODIyMTEyNzE3WhcNMjQx
MTIwMTEyNzE3WjBcMQswCQYDVQQGEwJjbjELMAkGA1UECBMCYmoxCzAJBgNVBAcT
AmJqMQ4wDAYDVQQKEwViYWlkdTEOMAwGA1UECxMFYmFpZHUxEzARBgNVBAMTCnd3
dy5iby5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCL+E9DNtAt
WYHzQNhGrYQkqFzHDiyWka5szqMgFfSt9dB8U336YwZBD0DxWzrR0vDSUkFRquV5
qD1k1iwC/rxobhku0Rb1HqrsYXdsUHSQoD3ixCh9xH2LnQcsNfKeL+eNkK9ZjU1V
gsRbpwk4Q7g9j8PwswMNuELPuK96nE+w6JmYUrCR+VlZNAGpexzQME6xrWe0O9lf
VzwvovKFg4LCqKv1DoiZRcNaAtf4y9dYGyBhLkIvM+kdLeQFgKMogwsST9HhG148
i5EdYLA8KLTlWbDDqn3PG1id/UyA/Rh2kSHL2w4Er5cwyuh11Bz31fsfEU5GbR4D
QOw3lfjU4YEbAgMBAAGjQjBAMB8GA1UdIwQYMBaAFE2J8eJn74wQObiJv9iG6KpE
AOZVMB0GA1UdDgQWBBTA5yAHSEN4REiIA1ZeJ0PCesr4WjANBgkqhkiG9w0BAQsF
AAOCAQEACBa042+9RqXW4Mn5Vl2EWVCGkJl7lsRJc/LUQPBsjDlqEbCOA4Ilz5rN
HzO+idbKGBaSUpLG53OllXYODbWOVmKjPy+NrzyGbbEgU22WcdYq5lZgUHMMIvNI
kzm1KVC/BCNY8PsBOLk+pIzdnoQFlD9mYWt32LY6ao/Opuq/TYJ6FkMGrD9ECWau
i6NrgyQHEHIOQg4q189PTQaWbtz3+v3fKEyi6UsHEP7pOun2XSnFlYaa3l7oH4Md
lpi89ugQog2IpuY5TJ61ka+kAajBaVSIeE0/NOXGBlGCF3ptzNRq3vGPro86aPYP
Zefi3motl1RLsGg+CeWhlwWH0d2MwA==
-----END CERTIFICATE-----

2.6 .key 文件

  • 格式: 通常是以 PEM (Privacy Enhanced Mail) 格式存储的二进制数据。
  • 内容: 私钥, 通常用于 OpenSSL 中。
  • 用途: 用于建立加密连接,如 HTTPS、SFTP 等。
  • 示例命令:
openssl genpkey -algorithm RSA -out server.key
  • 示例内容:
Bag Attributes
    friendlyName: www.bo.org
    localKeyID: 54 69 6D 65 20 31 37 32 34 38 34 31 35 37 38 35 39 31 
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCL+E9DNtAtWYHz
QNhGrYQkqFzHDiyWka5szqMgFfSt9dB8U336YwZBD0DxWzrR0vDSUkFRquV5qD1k
1iwC/rxobhku0Rb1HqrsYXdsUHSQoD3ixCh9xH2LnQcsNfKeL+eNkK9ZjU1VgsRb
pwk4Q7g9j8PwswMNuELPuK96nE+w6JmYUrCR+VlZNAGpexzQME6xrWe0O9lfVzwv
ovKFg4LCqKv1DoiZRcNaAtf4y9dYGyBhLkIvM+kdLeQFgKMogwsST9HhG148i5Ed
YLA8KLTlWbDDqn3PG1id/UyA/Rh2kSHL2w4Er5cwyuh11Bz31fsfEU5GbR4DQOw3
lfjU4YEbAgMBAAECggEAEemWIzDplVQmGD5NL0ZXaeWN8f9zX1WHb+9F2v5UUMrr
gm2g6qEvlLXiBsE5Fs8a+J+EMnJfaaFJMhVijoOREwA8AszJVlc1YojaoqbtM/D9
2n5l/CpgMrTGzTaeNPZGeMxyVFCL/Ax/GoeW23d3JZG3bp9KHcBd9H1bH6LPZAE+
YqPrBybLtUvGdmnmzE1FW1X6qcxI+chg6LQdYIad3Nvz7UPEFh6RTemEfyTNC+Gc
GBvusL0zQHq6GO8rdh8mAFqjqNc9qFlc8F+iuZVbquH6r2jPQrKhwXiwI+HFQXjG
Btf2MWF/UlrfBY6nda7xTLSrtDu26mQ+a700QRqYWQKBgQDzUNSdqGTY0ldHK2M5
jdCdL+EAw/gr/984lcAnN6g4thDMvlmqFq5x2tRAAVnXg6PCZihw8qLnydDNqfv+
M1Zoom4WkEQPn4TpT3a8zDYnomj2ADms/ydX7BHG3YpO5dnstkOWjzcom+iNC8pp
HwsJa2VJgu50G27GL93jDwAahwKBgQCTREc7wCpI6QqVAQcX5+5HW8lZi6kk3r2d
7NE9oBY/qB2h0w6RGzAygDmpQNCGS5wWaWUGqaFGQd/VBGVoJWnMuif/CFnXMA6F
kKqUztefWsJofa321DrNoEtgoG3mP/r0Q6bhPhxCoeGc71f2zhEWZthq7bIm9PDs
AXFU+kNlzQKBgHzRtoC6ZiGkpglohJp92csJSM/vuFw6AvUwPUbhEnclTzD5ZV4Q
DKVzsPa0urYIXfXYGl722gM2UNtwnEknZOiAiyEgGQo6tyBJF4x65j0m39ly/CN3
MWO1QtlVxSH8X/NC/SE7jvxSHtZcehW7Sxol8evoMxN1Dzq0S4uzokX5AoGAFWxz
aG/WNvEgBvk1TPcCpQLnUc2Nd72nnBfdgLePRQdx+B66GcX4xv/8Y3D4ZPEO7fu7
JLL8sTnYFCclkXcP4yaZtvJCD5oAItIe3rMQjzAm5AiUjDnnrA5LqOztz/cyzOIi
ntXoSpE+PxRamZ70wWuIxFV7+0ra2ZqEIDagI2kCgYArKiGNpEyqp3zZ68GAgTKJ
0oRjXvzZSsl5apSGkZy9oPjPEU7F0CS/YalXMmcvAfNUGQWhB1EfG1pgRvwObdBZ
SK8MDXAGvHWQGUlDtyHMyW6YQ15bRfw6xlPz9zepwapPWEca1mC9r6EOiX+aJEbD
ccrxFmPUfkDTjk8Pi9Bvcw==
-----END PRIVATE KEY-----

三、总结

  • .keystore/.jks:Java 应用程序使用的密钥库格式,包含私钥和证书。
  • .pem:通用的 ASCII 编码的密钥和证书格式,可用于多种目的。
  • .p12/.pfx: 跨平台的标准格式,包含私钥、证书和证书链。
  • .crt: X.509 格式的公钥证书文件。
  • .csr:证书签名请求文件,用于向证书颁发机构申请证书。
  • .key:通常是以 PEM (Privacy Enhanced Mail) 格式存储的二进制数据。

具体文件格式的选择取决于具体的需求和所使用的平台。例如:如果你是在 Java 环境中工作,可能会使用 .keystore.jks 文件;如果你需要跨平台兼容性,则可能更倾向于使用 .p12.pfx 文件。

整理完毕,完结撒花~🌻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿放下技术的小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值