Ubuntu 下 OpenSSL 身份验证实践
一 常见方式与适用场景
二 快速上手 单向 TLS 证书校验
openssl req -x509 -newkey rsa:2048 -sha256 -days 365 -nodes \
-subj "/CN=test.com" -keyout server.key -out server.crt
openssl verify -CAfile server.crt server.crt
openssl s_client -connect test.com:443 -servername test.com
三 双向 TLS mTLS 完整流程
openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes \
-subj "/CN=MyRootCA" -keyout rootCA.key -out rootCA.crt
cat > server.cnf <<'EOF'
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[dn]
CN = test.com
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = test.com
IP.1 = 192.168.1.10
EOF
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -config server.cnf
签发服务器证书(注意启用服务器用途扩展)cat > server_cert.cnf <<'EOF'
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectAltName=@alt_names
[alt_names]
DNS.1 = test.com
IP.1 = 192.168.1.10
EOF
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out server.crt -days 365 -sha256 -extfile server_cert.cnf
cat > client.cnf <<'EOF'
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[dn]
CN = client1
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = client1
EOF
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -config client.cnf
cat > client_cert.cnf <<'EOF'
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=clientAuth
EOF
openssl x509 -req -in client.csr -CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out client.crt -days 365 -sha256 -extfile client_cert.cnf
server {
listen 443 ssl;
ssl_certificate /path/server.crt;
ssl_certificate_key /path/server.key;
ssl_client_certificate /path/rootCA.crt; # 信任链
ssl_verify_client on; # 要求客户端证书
}
openssl s_client -connect test.com:443 -servername test.com \
-cert client.crt -key client.key -CAfile rootCA.crt
四 其他常见验证方式
echo -n "user:pass" | openssl base64 # 生成 Base64
curl -u user:pass https://example.com
ssh-keygen -t rsa -b 4096 -C "you@example.com"
ssh-copy-id user@remote_host
ssh -i ~/.ssh/id_rsa user@remote_host
五 故障排查与安全建议