OpenSSL在Linux下如何实现双向认证

978
2025/3/30 21:32:57
栏目: 云计算
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在Linux下使用OpenSSL实现双向认证(也称为客户端证书认证)涉及多个步骤,包括生成证书颁发机构(CA)、服务器证书、客户端证书以及配置服务器和客户端以使用这些证书。以下是一个详细的步骤指南:

1. 生成根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"

2. 生成服务器证书

接下来,生成服务器的私钥和证书签名请求(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

3. 生成客户端证书

同样地,生成客户端的私钥和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

4. 配置服务器

配置服务器以使用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

5. 配置客户端

配置客户端以使用其证书和私钥连接到服务器。

# 创建客户端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

6. 启动服务器

使用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

7. 连接客户端

使用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元/月。点击查看>>

推荐阅读: Linux SecureCRT如何进行命令历史记录