hacktricks/crypto-and-stego/certificates.md

10 KiB
Raw Blame History

证书

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式


使用Trickest可以轻松构建和自动化工作流程,利用世界上最先进的社区工具。
立即获取访问权限:

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

什么是证书

公钥证书是用于加密学中证明某人拥有公钥的数字身份证。它包括密钥的详细信息、所有者的身份(主体)以及来自受信任机构(签发者)的数字签名。如果软件信任签发者并且签名有效,则可以与密钥所有者进行安全通信。

证书通常由证书颁发机构CAs公钥基础设施PKI设置中颁发。另一种方法是信任网络,用户直接验证彼此的密钥。证书的常见格式是X.509可以根据RFC 5280中概述的特定需求进行调整。

x509常见字段

x509证书中的常见字段

在x509证书中几个字段在确保证书的有效性和安全性方面起着关键作用。以下是这些字段的详细信息:

  • 版本号表示x509格式的版本。
  • 序列号在证书颁发机构CA系统中唯一标识证书主要用于吊销跟踪。
  • 主体字段代表证书的所有者,可以是机器、个人或组织。它包括详细的标识,如:
  • 通用名称CN:证书涵盖的域。
  • 国家C地点L州或省ST、S或P、**组织O组织单位OU**提供地理和组织详细信息。
  • **显式名称DN**封装了完整的主体标识。
  • 签发者详细说明了谁验证并签署了证书包括与CA的主体类似的子字段。
  • 有效期Not BeforeNot After时间戳标记,确保证书在特定日期之前或之后不被使用。
  • 公钥部分对证书的安全性至关重要,指定了公钥的算法、大小和其他技术细节。
  • x509v3扩展增强了证书的功能,指定了密钥用途扩展密钥用途主体替代名称和其他属性,以微调证书的应用。

密钥用途和扩展

  • 密钥用途标识公钥的加密应用,如数字签名或密钥加密。
  • 扩展密钥用途进一步缩小了证书的用途范围例如用于TLS服务器身份验证。
  • 主体替代名称基本约束定义了证书涵盖的附加主机名以及它是CA还是终端实体证书。
  • 主体密钥标识符颁发者密钥标识符确保密钥的唯一性和可追溯性。
  • 颁发者信息访问CRL分发点提供了验证颁发CA的路径和检查证书吊销状态的途径。
  • CT预证书SCTs提供透明日志,对于证书的公共信任至关重要。
# Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509
from cryptography.hazmat.backends import default_backend

# Load an x509 certificate (assuming cert.pem is a certificate file)
with open("cert.pem", "rb") as file:
cert_data = file.read()
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())

# Accessing fields
serial_number = certificate.serial_number
issuer = certificate.issuer
subject = certificate.subject
public_key = certificate.public_key()

print(f"Serial Number: {serial_number}")
print(f"Issuer: {issuer}")
print(f"Subject: {subject}")
print(f"Public Key: {public_key}")

OCSP和CRL分发点的区别

OCSPRFC 2560)涉及客户端和响应者共同工作,检查数字公钥证书是否已被吊销,无需下载完整的CRL。这种方法比传统的CRL更高效后者提供了一份吊销证书序列号列表但需要下载一个可能很大的文件。CRL可以包含多达512个条目。更多详细信息请参阅此处

什么是证书透明度

证书透明度通过确保SSL证书的签发和存在对域所有者、CA和用户可见有助于防范与证书相关的威胁。其目标包括

  • 防止CA未经域所有者知情即为域签发SSL证书。
  • 建立一个用于跟踪错误或恶意签发证书的开放审计系统。
  • 保护用户免受欺诈证书的侵害。

证书日志

证书日志是由网络服务维护的公开可审计、仅追加记录的证书记录用于审计目的。这些日志为发行机构和公众提供了加密证据以供审计。发行机构和公众都可以向这些日志提交证书或查询以进行验证。虽然日志服务器的确切数量不固定但全球预计少于一千个。这些服务器可以由CA、ISP或任何感兴趣的实体独立管理。

查询

要查看任何域的证书透明度日志,请访问https://crt.sh/

存在不同格式用于存储证书,每种格式都有其自己的用例和兼容性。本摘要涵盖了主要格式并提供了在它们之间转换的指导。

格式

PEM格式

  • 证书最广泛使用的格式。
  • 需要单独的文件用于证书和私钥编码为Base64 ASCII。
  • 常见扩展名:.cer、.crt、.pem、.key。
  • 主要由Apache和类似服务器使用。

DER格式

  • 证书的二进制格式。
  • 不包含PEM文件中的“BEGIN/END CERTIFICATE”语句。
  • 常见扩展名:.cer、.der。
  • 通常与Java平台一起使用。

P7B/PKCS#7格式

  • 以Base64 ASCII存储扩展名为.p7b或.p7c。
  • 仅包含证书和链证书,不包括私钥。
  • 受Microsoft Windows和Java Tomcat支持。

PFX/P12/PKCS#12格式

  • 将服务器证书、中间证书和私钥封装在一个文件中的二进制格式。
  • 扩展名:.pfx、.p12。
  • 主要用于Windows上的证书导入和导出。

格式转换

PEM转换对于兼容性至关重要:

  • x509转为PEM
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
  • PEM转DER
openssl x509 -outform der -in certificatename.pem -out certificatename.der
  • DER转PEM
openssl x509 -inform der -in certificatename.der -out certificatename.pem
  • PEM转P7B
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
  • PKCS7转PEM
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem

PFX转换对于在Windows上管理证书至关重要

  • PFX到PEM
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
  • PFX转PKCS#8 包括两个步骤:
  1. 将PFX转换为PEM
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
  1. 将PEM转换为PKCS8
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
  • P7B转PFX 也需要两个命令:
  1. 将P7B转换为CER
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
  1. 将CER证书和私钥转换为PFX格式
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer


使用 Trickest 可轻松构建并通过世界上最先进的社区工具自动化工作流程
立即获取访问权限:

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

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持 HackTricks 的其他方式: