在Linux下使用OpenSSL实现双向认证(也称为客户端证书认证)涉及多个步骤,包括生成证书颁发机构(CA)、服务器证书、客户端证书以及配置服务器和客户端以使用这些证书。以下是一个详细的步骤指南:
首先,你需要创建一个根CA来签署服务器和客户端的证书。
# 创建根CA目录
mkdir -p /etc/ssl/CA
# 生成根CA私钥
openssl genrsa -out /etc/ssl/CA/private/ca.key 4096
# 生成根CA证书
openssl req -x509 -new -nodes -key /etc/ssl/CA/private/ca.key -sha256 -days 1024 -out /etc/ssl/CA/cacert.pem -subj "/C=US/ST=State/L=City/O=Organization/CN=RootCA"
接下来,生成服务器的私钥和证书签名请求(CSR),然后用根CA签署它。
# 创建服务器目录
mkdir -p /etc/ssl/server
# 生成服务器私钥
openssl genrsa -out /etc/ssl/server/private/server.key 2048
# 生成服务器CSR
openssl req -new -key /etc/ssl/server/private/server.key -out /etc/ssl/server/server.csr -subj "/C=US/ST=State/L=City/O=Organization/CN=server.example.com"
# 生成服务器证书
openssl x509 -req -in /etc/ssl/server/server.csr -CA /etc/ssl/CA/cacert.pem -CAkey /etc/ssl/CA/private/ca.key -CAcreateserial -out /etc/ssl/server/server.crt -days 500 -sha256
同样地,生成客户端的私钥和CSR,然后用根CA签署它。
# 创建客户端目录
mkdir -p /etc/ssl/client
# 生成客户端私钥
openssl genrsa -out /etc/ssl/client/private/client.key 2048
# 生成客户端CSR
openssl req -new -key /etc/ssl/client/private/client.key -out /etc/ssl/client/client.csr -subj "/C=US/ST=State/L=City/O=Organization/CN=client.example.com"
# 生成客户端证书
openssl x509 -req -in /etc/ssl/client/client.csr -CA /etc/ssl/CA/cacert.pem -CAkey /etc/ssl/CA/private/ca.key -CAcreateserial -out /etc/ssl/client/client.crt -days 500 -sha256
配置服务器以使用SSL/TLS,并要求客户端证书。
# 创建服务器SSL配置文件
cat > /etc/ssl/ssl.conf <<EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=US
ST=State
L=City
O=Organization
CN=server.example.com
[server]
listen = 443
cert = /etc/ssl/server/server.crt
key = /etc/ssl/server/private/server.key
verify = 1
verify_depth = 2
CAfile = /etc/ssl/CA/cacert.pem
EOF
配置客户端以使用其证书和私钥连接到服务器。
# 创建客户端SSL配置文件
cat > /etc/ssl/client/ssl.conf <<EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=US
ST=State
L=City
O=Organization
CN=client.example.com
[client]
CAfile = /etc/ssl/CA/cacert.pem
cert = /etc/ssl/client/client.crt
key = /etc/ssl/client/private/client.key
EOF
使用OpenSSL启动一个简单的TCP服务器,并配置它以使用SSL/TLS。
openssl s_server -www -cert /etc/ssl/server/server.crt -key /etc/ssl/server/private/server.key -CAfile /etc/ssl/CA/cacert.pem -verify 2 -accept 443
使用OpenSSL连接到服务器,并提供客户端证书。
openssl s_client -connect localhost:443 -cert /etc/ssl/client/client.crt -key /etc/ssl/client/private/client.key -CAfile /etc/ssl/CA/cacert.pem
通过这些步骤,你可以在Linux下使用OpenSSL实现双向认证。确保在实际部署中,证书和密钥文件的安全性得到妥善保护。
辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>