hacktricks/crypto-and-stego/certificates.md

198 lines
10 KiB
Markdown
Raw Normal View History

2024-04-06 18:13:07 +00:00
# 证书
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
2024-04-06 18:13:07 +00:00
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索我们的独家[NFTs收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2024-04-06 18:13:07 +00:00
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2024-04-06 18:13:07 +00:00
\
使用[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates)可以轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
2024-04-06 18:13:07 +00:00
立即获取访问权限:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
2024-04-06 18:13:07 +00:00
## 什么是证书
**公钥证书**是用于加密学中证明某人拥有公钥的数字身份证。它包括密钥的详细信息、所有者的身份(主体)以及来自受信任机构(签发者)的数字签名。如果软件信任签发者并且签名有效,则可以与密钥所有者进行安全通信。
2024-04-06 18:13:07 +00:00
证书通常由[证书颁发机构](https://en.wikipedia.org/wiki/Certificate\_authority)CAs在[公钥基础设施](https://en.wikipedia.org/wiki/Public-key\_infrastructure)PKI设置中颁发。另一种方法是[信任网络](https://en.wikipedia.org/wiki/Web\_of\_trust),用户直接验证彼此的密钥。证书的常见格式是[X.509](https://en.wikipedia.org/wiki/X.509)可以根据RFC 5280中概述的特定需求进行调整。
## x509常见字段
### **x509证书中的常见字段**
在x509证书中几个**字段**在确保证书的有效性和安全性方面起着关键作用。以下是这些字段的详细信息:
* **版本号**表示x509格式的版本。
* **序列号**在证书颁发机构CA系统中唯一标识证书主要用于吊销跟踪。
* **主体**字段代表证书的所有者,可以是机器、个人或组织。它包括详细的标识,如:
* **通用名称CN**:证书涵盖的域。
* **国家C**、**地点L**、**州或省ST、S或P**、**组织O**和**组织单位OU**提供地理和组织详细信息。
* **显式名称DN**封装了完整的主体标识。
* **签发者**详细说明了谁验证并签署了证书包括与CA的主体类似的子字段。
2024-04-06 18:13:07 +00:00
* **有效期**由**Not Before**和**Not After**时间戳标记,确保证书在特定日期之前或之后不被使用。
* **公钥**部分对证书的安全性至关重要,指定了公钥的算法、大小和其他技术细节。
* **x509v3扩展**增强了证书的功能,指定了**密钥用途**、**扩展密钥用途**、**主体替代名称**和其他属性,以微调证书的应用。
#### **密钥用途和扩展**
* **密钥用途**标识公钥的加密应用,如数字签名或密钥加密。
* **扩展密钥用途**进一步缩小了证书的用途范围例如用于TLS服务器身份验证。
* **主体替代名称**和**基本约束**定义了证书涵盖的附加主机名以及它是CA还是终端实体证书。
* **主体密钥标识符**和**颁发者密钥标识符**确保密钥的唯一性和可追溯性。
* **颁发者信息访问**和**CRL分发点**提供了验证颁发CA的路径和检查证书吊销状态的途径。
* **CT预证书SCTs**提供透明日志,对于证书的公共信任至关重要。
2024-04-06 18:13:07 +00:00
```python
# 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分发点的区别**
**OCSP****RFC 2560**)涉及客户端和响应者共同工作,检查数字公钥证书是否已被吊销,无需下载完整的**CRL**。这种方法比传统的**CRL**更高效后者提供了一份吊销证书序列号列表但需要下载一个可能很大的文件。CRL可以包含多达512个条目。更多详细信息请参阅[此处](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)。
### **什么是证书透明度**
2024-04-06 18:13:07 +00:00
证书透明度通过确保SSL证书的签发和存在对域所有者、CA和用户可见有助于防范与证书相关的威胁。其目标包括
2024-04-06 18:13:07 +00:00
* 防止CA未经域所有者知情即为域签发SSL证书。
* 建立一个用于跟踪错误或恶意签发证书的开放审计系统。
* 保护用户免受欺诈证书的侵害。
#### **证书日志**
证书日志是由网络服务维护的公开可审计、仅追加记录的证书记录用于审计目的。这些日志为发行机构和公众提供了加密证据以供审计。发行机构和公众都可以向这些日志提交证书或查询以进行验证。虽然日志服务器的确切数量不固定但全球预计少于一千个。这些服务器可以由CA、ISP或任何感兴趣的实体独立管理。
2024-04-06 18:13:07 +00:00
#### **查询**
要查看任何域的证书透明度日志,请访问[https://crt.sh/](https://crt.sh)。
2024-04-06 18:13:07 +00:00
存在不同格式用于存储证书,每种格式都有其自己的用例和兼容性。本摘要涵盖了主要格式并提供了在它们之间转换的指导。
## **格式**
### **PEM格式**
* 证书最广泛使用的格式。
* 需要单独的文件用于证书和私钥编码为Base64 ASCII。
* 常见扩展名:.cer、.crt、.pem、.key。
* 主要由Apache和类似服务器使用。
### **DER格式**
* 证书的二进制格式。
* 不包含PEM文件中的“BEGIN/END CERTIFICATE”语句。
2024-04-06 18:13:07 +00:00
* 常见扩展名:.cer、.der。
* 通常与Java平台一起使用。
### **P7B/PKCS#7格式**
* 以Base64 ASCII存储扩展名为.p7b或.p7c。
2024-04-06 18:13:07 +00:00
* 仅包含证书和链证书,不包括私钥。
* 受Microsoft Windows和Java Tomcat支持。
### **PFX/P12/PKCS#12格式**
* 将服务器证书、中间证书和私钥封装在一个文件中的二进制格式。
2024-04-06 18:13:07 +00:00
* 扩展名:.pfx、.p12。
* 主要用于Windows上的证书导入和导出。
### **格式转换**
**PEM转换**对于兼容性至关重要:
* **x509转为PEM**
```bash
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
```
* **PEM转DER**
```bash
openssl x509 -outform der -in certificatename.pem -out certificatename.der
```
* **DER转PEM**
```bash
openssl x509 -inform der -in certificatename.der -out certificatename.pem
```
* **PEM转P7B**
2024-04-06 18:13:07 +00:00
```bash
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
```
* **PKCS7转PEM**
2024-04-06 18:13:07 +00:00
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
```
**PFX转换**对于在Windows上管理证书至关重要
2024-04-06 18:13:07 +00:00
- **PFX到PEM**
2024-04-06 18:13:07 +00:00
```bash
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
```
* **PFX转PKCS#8** 包括两个步骤:
2024-04-06 18:13:07 +00:00
1. 将PFX转换为PEM
```bash
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
```
2. 将PEM转换为PKCS8
```bash
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
```
* **P7B转PFX** 也需要两个命令:
2024-04-06 18:13:07 +00:00
1. 将P7B转换为CER
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
```
2. 将CER证书和私钥转换为PFX格式
```bash
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
```
***
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2024-04-06 18:13:07 +00:00
\
使用 [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates) 可轻松构建并通过世界上**最先进**的社区工具**自动化工作流程**。\
2024-04-06 18:13:07 +00:00
立即获取访问权限:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
2024-04-06 18:13:07 +00:00
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
2024-04-06 18:13:07 +00:00
支持 HackTricks 的其他方式:
2024-04-06 18:13:07 +00:00
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们**。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**。
2024-04-06 18:13:07 +00:00
</details>