hacktricks/cryptography/certificates.md
2023-08-03 19:12:22 +00:00

16 KiB
Raw Blame History

证书

☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥


使用Trickest可以轻松构建和自动化由全球最先进的社区工具提供支持的工作流程。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

什么是证书

在密码学中,公钥证书,也称为数字证书身份证书,是用于证明公钥所有权的电子文档。证书包括有关密钥的信息,其所有者的身份信息(称为主体),以及验证证书内容的实体的数字签名(称为颁发者)。如果签名有效,并且检查证书的软件信任颁发者,则可以使用该密钥与证书的主体进行安全通信。

在典型的公钥基础设施PKI方案中证书颁发者是一个证书颁发机构CA通常是一家向客户收费以为其颁发证书的公司。相比之下信任网络方案中,个人直接签署彼此的密钥,以一种类似于公钥证书的格式执行类似功能。

公钥证书的最常见格式由X.509定义。由于X.509非常通用,因此该格式受到为某些用例定义的配置文件的进一步限制,例如RFC 5280中定义的公钥基础设施X.509

x509 常见字段

  • 版本号x509 格式的版本。
  • 序列号:用于在 CA 的系统中唯一标识证书。特别是用于跟踪吊销信息。
  • 主体:证书所属的实体:机器、个人或组织。
  • 通用名称:受证书影响的域。可以是一个或多个,并且可以包含通配符。
  • 国家C:国家
  • 可分辨名称DN:完整的主体:C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net
  • 地点L:地点
  • 组织O:组织名称
  • 组织单位OU:组织的部门(如“人力资源”)。
  • 州或省ST、S 或 P:州或省名称列表
  • 颁发者:验证信息并签署证书的实体。
  • 通用名称CN:证书颁发机构的名称
  • 国家C:证书颁发机构的国家
  • 可分辨名称DN:证书颁发机构的可分辨名称
  • 地点L:组织所在的地点。
  • 组织O:组织名称
  • 组织单位OU:组织的部门(如“人力资源”)。
  • 起始日期:证书有效的最早时间和日期。通常设置为证书签发的几个小时或几天之前的时刻,以避免时钟偏差问题。
  • 截止日期:证书不再有效的时间和日期。
  • 公钥:属于证书主体的公钥。(这是主要部分之一,因为这是由 CA 签名的内容)
  • 公钥算法:用于生成公钥的算法。如 RSA。
  • 公钥曲线:椭圆曲线公钥算法使用的曲线(如果适用)。如 nistp521。
  • 公钥指数:用于推导公钥的指数(如果适用)。如 65537。
  • 公钥大小:公钥空间的位数大小。如 2048。
  • 签名算法:用于签署公钥证书的算法。
  • 签名:颁发者的私钥对证书主体进行的签名。
  • x509v3 扩展
  • 密钥用途:证书公钥的有效加密用途。常见值包括数字签名验证、密钥加密和证书签名。
  • 在 Web 证书中,它将显示为 X509v3 扩展,并具有值 Digital Signature
  • 扩展密钥用途:证书可用于的应用程序。常见值包括 TLS 服务器身份验证、电子邮件保护和代码签名。
  • 在 Web 证书中,它将显示为 X509v3 扩展,并具有值 TLS Web Server Authentication
  • 主体备用名称:允许用户为单个 SSL 证书指定其他主机名称。使用 SAN 扩展是 SSL 证书的标准做法,它正在取代常见名称的使用。
  • 基本约束:此扩展描述证书是 CA 证书还是终端实体证书。CA 证书是签署其他证书的证书,终端实体证书是例如在网页中使用的证书(链的最后一部分)。
  • 主体密钥标识符SKI此扩展声明证书中公钥的唯一标识符。所有 CA 证书都需要它。CA 将自己的 SKI 传播到已颁发证书的颁发者密钥标识符AKI扩展中。它是主体公钥的哈希值。
  • Authority Key IdentifierAKI它包含一个从颁发者证书中的公钥派生出的密钥标识符。它是颁发者公钥的哈希值。
  • Authority Information AccessAIA该扩展最多包含两种类型的信息
  • 关于如何获取此证书的颁发者的信息CA颁发者访问方法
  • 可以检查此证书吊销的OCSP响应者的地址OCSP访问方法
  • CRL分发点此扩展标识了可以检查此证书吊销的CRL的位置。处理证书的应用程序可以从此扩展中获取CRL的位置下载CRL然后检查此证书的吊销情况。
  • CT预证书SCT:关于证书的证书透明性日志

OCSP和CRL分发点的区别

OCSPRFC 2560是一个标准协议OCSP客户端和OCSP响应者组成。该协议确定给定数字公钥证书的吊销状态,而无需下载整个CRL。
CRL是检查证书有效性的传统方法CRL提供了已吊销或不再有效的证书序列号列表。CRL允许验证者在验证证书时检查所呈现证书的吊销状态。CRL的条目数限制为512个。
来源:这里

什么是证书透明性

证书透明性旨在通过使SSL证书的颁发和存在对域所有者、CA和域用户进行公开审查来解决基于证书的威胁。具体而言证书透明性有三个主要目标

  • 使CA无法在未被该域的所有者看到的情况下为该域颁发SSL证书,或者至少非常困难。
  • 提供一个开放的审计和监控系统让任何域所有者或CA确定证书是否被错误或恶意颁发。
  • 尽可能地保护用户免受错误或恶意颁发的证书的欺骗。

证书日志

证书日志是简单的网络服务,用于维护具有密码学保证、可公开审计、仅追加记录的证书任何人都可以向日志提交证书尽管证书颁发机构可能是最主要的提交者。同样任何人都可以查询日志以获取密码学证明用于验证日志的行为是否正确或验证特定证书是否已被记录。日志服务器的数量不必很大比如全球不到一千个每个服务器可以由CA、ISP或任何其他感兴趣的方运营。

查询

您可以查询https://crt.sh/上任何域的证书透明性日志。

格式

有不同的格式可用于存储证书。

PEM格式

  • 这是最常用的证书格式
  • 大多数服务器例如Apache期望证书和私钥分别存储在不同的文件中
    - 通常它们是Base64编码的ASCII文件
    - 用于PEM证书的扩展名为.cer、.crt、.pem、.key文件
    - Apache和类似的服务器使用PEM格式证书

DER格式

  • DER格式是证书的二进制形式
  • 所有类型的证书和私钥都可以编码为DER格式
  • DER格式的证书不包含“BEGIN CERTIFICATE/END CERTIFICATE”语句
  • DER格式的证书通常使用“.cer”和“.der”扩展名
  • DER通常用于Java平台

P7B/PKCS#7格式

  • PKCS#7或P7B格式以Base64 ASCII格式存储并具有.p7b或.p7c文件扩展名
  • P7B文件仅包含证书和链证书中间CA不包含私钥
  • 支持P7B文件的最常见平台是Microsoft Windows和Java Tomcat

PFX/P12/PKCS#12格式

  • PKCS#12或PFX/P12格式是一种二进制格式用于将服务器证书、中间证书和私钥存储在一个可加密文件中
  • 这些文件通常具有.pfx和.p12等扩展名
  • 它们通常用于Windows机器上导入和导出证书和私钥

格式转换

将x509转换为PEM

openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem

将PEM转换为DER

To convert a PEM (Privacy-Enhanced Mail) certificate file to DER (Distinguished Encoding Rules) format, you can use the OpenSSL command-line tool. The DER format is a binary representation of the certificate, while the PEM format is a base64-encoded ASCII representation.

To perform the conversion, use the following command:

openssl x509 -in certificate.pem -outform der -out certificate.der

Replace certificate.pem with the path to your PEM certificate file, and certificate.der with the desired output file name for the DER format.

After executing the command, you will have a DER format certificate file that can be used in various cryptographic applications.

openssl x509 -outform der -in certificatename.pem -out certificatename.der

将DER转换为PEM

要将DER格式的证书转换为PEM格式可以使用以下命令

openssl x509 -inform der -in certificate.der -out certificate.pem

这将把名为certificate.der的DER证书转换为PEM格式并将其保存为certificate.pem文件。

openssl x509 -inform der -in certificatename.der -out certificatename.pem

将PEM转换为P7B

注意: PKCS#7或P7B格式以Base64 ASCII格式存储并具有.p7b或.p7c的文件扩展名。P7B文件仅包含证书和链证书中间CA而不包含私钥。支持P7B文件的最常见平台是Microsoft Windows和Java Tomcat。

openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer

将PKCS7转换为PEM格式

To convert a PKCS7 file to PEM format, you can use the OpenSSL command-line tool. Here's the command you can use:

openssl pkcs7 -print_certs -in input.p7b -out output.pem

Replace input.p7b with the path to your PKCS7 file and output.pem with the desired name and path for the PEM file.

使用OpenSSL命令行工具可以将PKCS7文件转换为PEM格式。以下是您可以使用的命令

openssl pkcs7 -print_certs -in input.p7b -out output.pem

input.p7b替换为您的PKCS7文件的路径output.pem替换为PEM文件的所需名称和路径。

openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem

将pfx转换为PEM

注意: PKCS#12或PFX格式是一种二进制格式用于将服务器证书、中间证书和私钥存储在一个可加密的文件中。PFX文件通常具有.pfx和.p12等扩展名。PFX文件通常用于Windows机器上导入和导出证书和私钥。

openssl pkcs12 -in certificatename.pfx -out certificatename.pem

将PFX转换为PKCS#8
**注意:**这需要2个命令

1- 将PFX转换为PEM

openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem

2- 将PEM转换为PKCS8

To convert a PEM (Privacy-Enhanced Mail) formatted file to PKCS8 (Public-Key Cryptography Standards #8) format, you can use the OpenSSL command-line tool.

使用OpenSSL命令行工具可以将PEMPrivacy-Enhanced Mail格式的文件转换为PKCS8Public-Key Cryptography Standards #8格式。

openssl pkcs8 -topk8 -inform PEM -outform PEM -in private_key.pem -out private_key_pkcs8.pem

Replace private_key.pem with the path to your PEM file, and private_key_pkcs8.pem with the desired output file name for the PKCS8 formatted key.

private_key.pem替换为您的PEM文件的路径private_key_pkcs8.pem替换为PKCS8格式密钥的所需输出文件名。

This command will convert the private key in the PEM file to PKCS8 format and save it in the specified output file.

该命令将把PEM文件中的私钥转换为PKCS8格式并将其保存在指定的输出文件中。

openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8

将P7B转换为PFX
**注意:**这需要2个命令

1- 将P7B转换为CER

openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer

2- 将CER证书和私钥转换为PFX格式

To convert a CER certificate and its corresponding private key to PFX format, you can use the OpenSSL tool. The PFX format is commonly used for storing both the certificate and private key in a single file.

Here is the command to perform the conversion:

openssl pkcs12 -export -out certificate.pfx -inkey privatekey.key -in certificate.cer

Replace privatekey.key with the path to your private key file and certificate.cer with the path to your CER certificate file. The resulting PFX file will be named certificate.pfx.

During the conversion process, you will be prompted to set a password for the PFX file. Make sure to choose a strong password and keep it secure.

After the conversion is complete, you can use the PFX file for various purposes, such as importing it into a web server or using it for client authentication.

openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile  cacert.cer

使用Trickest轻松构建和自动化由全球最先进的社区工具提供支持的工作流程。 立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥