Certificates

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

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

什么是证书

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

证书通常由证书颁发机构(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 可轻松构建并通过世界上最先进的社区工具自动化工作流程。 立即获取访问权限:

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持 HackTricks 的其他方式:

最后更新于