在Linux系统中,使用OpenSSL实现双向认证(也称为客户端证书认证)涉及生成证书颁发机构(CA)、服务器证书、客户端证书以及配置服务器和客户端以使用这些证书。以下是详细步骤:
首先,创建一个根CA来签署服务器和客户端证书。
# 创建根CA目录
mkdir -p /etc/ssl/CA
# 创建CA私钥
openssl genrsa -out /etc/ssl/CA/private/ca-key.pem 4096
# 创建CA证书请求
openssl req -new -x509 -days 3650 -key /etc/ssl/CA/private/ca-key.pem -out /etc/ssl/CA/cacert.pem -subj "/C=US/ST=State/L=City/O=Organization/CN=Root CA"
# 创建CA目录结构
mkdir /etc/ssl/CA/newcerts
echo 1000 > /etc/ssl/CA/serial
chmod 400 /etc/ssl/CA/private/ca-key.pem
chmod 444 /etc/ssl/CA/cacert.pem
接下来,创建服务器证书并使用根CA签署。
# 创建服务器私钥
openssl genrsa -out /etc/ssl/private/server-key.pem 2048
# 创建服务器证书请求
openssl req -new -key /etc/ssl/private/server-key.pem -out /etc/ssl/certs/server-csr.pem -subj "/C=US/ST=State/L=City/O=Organization/CN=server.example.com"
# 使用根CA签署服务器证书
openssl x509 -req -in /etc/ssl/certs/server-csr.pem -CA /etc/ssl/CA/cacert.pem -CAkey /etc/ssl/CA/private/ca-key.pem -CAcreateserial -out /etc/ssl/certs/server-cert.pem -days 365
然后,创建客户端证书并使用相同的根CA签署。
# 创建客户端私钥
openssl genrsa -out /etc/ssl/private/client-key.pem 2048
# 创建客户端证书请求
openssl req -new -key /etc/ssl/private/client-key.pem -out /etc/ssl/certs/client-csr.pem -subj "/C=US/ST=State/L=City/O=Organization/CN=client.example.com"
# 使用根CA签署客户端证书
openssl x509 -req -in /etc/ssl/certs/client-csr.pem -CA /etc/ssl/CA/cacert.pem -CAkey /etc/ssl/CA/private/ca-key.pem -CAcreateserial -out /etc/ssl/certs/client-cert.pem -days 365
配置服务器以使用SSL/TLS并启用客户端证书认证。
# 创建服务器配置文件
cat <<EOF > /etc/ssl/ssl.conf
[global]
cert = /etc/ssl/certs/server-cert.pem
key = /etc/ssl/private/server-key.pem
CAfile = /etc/ssl/CA/cacert.pem
verify = 2
EOF
# 配置SSL/TLS协议和密码套件
cat <<EOF >> /etc/ssl/ssl.conf
[server]
SSLCipherSuite HIGH:!aNULL:!MD5
SSLProtocol all -SSLv2 -SSLv3
EOF
# 重启SSL服务(例如Apache或Nginx)
systemctl restart apache2 # 或 systemctl restart nginx
配置客户端以使用客户端证书进行认证。
# 创建客户端配置文件
cat <<EOF > /etc/ssl/client.conf
[global]
cacert = /etc/ssl/CA/cacert.pem
cert = /etc/ssl/certs/client-cert.pem
key = /etc/ssl/private/client-key.pem
EOF
# 使用客户端配置文件进行连接(例如使用curl)
curl --cacert /etc/ssl/CA/cacert.pem --cert /etc/ssl/certs/client-cert.pem --key /etc/ssl/private/client-key.pem https://server.example.com
确保服务器和客户端都正确配置了证书,并且服务器能够验证客户端的证书。
通过以上步骤,你可以在Linux系统中使用OpenSSL实现双向认证。确保在实际部署中仔细检查每个步骤,以确保安全性和正确性。