本文档介绍了如何使用openssl命令行工具创建自定义证书颁发机构(CA),并生成服务器和客户端的证书及私钥。这个过程对于在本地或内部网络中建立安全的通信环境,尤其是进行SSL/TLS加密时非常有用,而无需依赖第三方商业CA。
在开始之前,你需要对openssl命令有一定的了解,它是开源的加密工具包,支持各种加密算法和协议,包括生成密钥、证书请求、证书等。
1. 首先,生成服务器端的RSA私钥:
使用`openssl genrsa -des3 -out server.key 1024`命令生成一个带密码保护的1024位RSA私钥。这个私钥需要妥善保管,因为它是服务器身份的核心。为了去掉私钥的密码保护,可以使用`openssl rsa -in server.key -out server.key`命令。
2. 接下来,生成证书签名请求(CSR):
`openssl req -new -key server.key -out server.csr -config openssl.cnf`命令会根据配置文件(openssl.cnf)中的信息生成CSR,其中包含服务器的公钥和其他标识信息。在执行此命令时,系统会提示输入相关组织信息。
3. 对客户端进行相同操作:
类似地,使用`openssl genrsa -des3 -out client.key 1024`生成客户端私钥,然后用`openssl req -new -key client.key -out client.csr -config openssl.cnf`生成客户端的CSR。
4. 创建自签名的CA:
如果不希望付费给商业CA,可以自建CA来签署证书。首先,生成CA的私钥和证书:`openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf`。然后,创建一个CA目录结构,包括存放证书的newcerts目录以及index.txt和serial文件,用于跟踪已签发的证书。
5. 使用自签名CA签署服务器和客户端的CSR:
通过`openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf`和`openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf`,用CA的私钥签署服务器和客户端的CSR,生成相应的证书。
6. 客户端和服务器所需文件:
客户端需要的文件包括CA的公钥证书(ca.crt)、客户端证书(client.crt)和客户端私钥(client.key)。服务器端则需要CA证书(ca.crt)、服务器证书(server.crt)和服务器私钥(server.key)。
完成以上步骤后,你可以将自签发的证书部署到服务器和客户端,实现安全连接。然而,这种自签名证书在公共互联网上可能不被浏览器信任,因为它们没有权威CA的签名。但在内部网络环境中,自建CA是一个经济且有效的解决方案。