目录
一、背景
我们在日常的开发过程中,经常会见到各种各样的证书相关类型的文件,错综复杂。
其实 keystore
、jks
、p12
、pfx
、crt
、csr
、pem
这些文件类型都是在处理加密和认证过程中常见的文件格式,每种文件都有其特定的用途和格式,我们下面来对这几种类型进行简要说明。
二、文件格式的区分
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
文件。
整理完毕,完结撒花~🌻