如果您的基础设施很小,运行 CA 的许多细节(例如 CRL 等)可能会被忽略。相反,您真正需要担心的是签署证书。
有许多工具可以为您管理此过程。我什至在很多年前写过一篇。但是,如果您想要一些非常简单的东西,我推荐的是OpenVPN 项目中的easy-rsa。它是 OpenSSL 命令行工具的一个非常薄的包装器。如果您要管理大量证书并实际处理吊销等问题,您将需要一个更复杂且功能完整的实用程序。已经提供了足够多的建议,所以我只会坚持你想要完成的基础知识。
但这是基本程序。我将用 OpenSSL 来解释它,但任何系统都可以。
首先创建您的“根”CA——它将是一个自签名证书。做这件事有很多种方法; 这是一。我们将使用 2048 位密钥制作 10 年证书。适当调整数字。你提到你担心散列算法,所以我添加-sha256
以确保它是用可接受的东西签名的。我正在使用 AES-256 加密密钥,但这是可选的。您将被要求填写证书名称等;这些细节对于根 CA 并不是特别重要。
# First create the key (use 4096-bits if that's what floats your boat)
openssl genrsa -aes256 -out root.key 2048
# Then use that key to generate a self-signed cert
openssl req -new -x509 -key root.key -out root.cer -days 3652 -sha256
如果您在第一步中加密了密钥,则必须提供密码才能在第二步中使用它。检查您生成的证书以确保在“基本约束”下您看到“CA:TRUE”。这确实是您需要担心的唯一重要的一点:
openssl x509 -text < root.cer
凉爽的。好的,现在让我们签署一个证书。我们需要另一个密钥,这次是一个请求。系统会再次询问您的姓名和地址。您填写的字段和提供的内容取决于您和您的应用程序,但最重要的字段是“通用名称”。这就是您提供主机名或登录名或该证书将证明的任何内容的地方。
# Create new key
openssl genrsa -aes256 -out client1.key 2048
# Use that key to generate a request
openssl req -new -key client1.key -out client1.req
# Sign that request to generate a new cert
openssl x509 -req -in client1.req -out client1.cer -CA root.cer -CAkey root.key -sha256 -CAcreateserial
请注意,这会创建一个名为 root.srl 的文件,以保持我们的序列号正确。该-CAcreateserial
标志告诉 openssl 创建此文件,因此您为您签署的第一个请求提供它,然后再也不提供。再一次,您可以看到在哪里添加-sha256
参数。
这种方法——手动做所有事情——在我看来不是最好的主意。如果您正在运行一个相当大的操作,那么您可能需要一个可以为您跟踪所有证书的工具。
相反,我的意思是向您展示您想要的输出(证书以您想要的方式签名)并不取决于您使用的工具,而是您为这些工具提供的选项。大多数工具可以输出各种各样的配置,无论强弱,您可以提供您认为合适的数字。过时的默认设置与课程相同。