在Ubuntu上使用Nginx配置客户端证书认证(Client Certificate Authentication)可以增强安全性,确保只有持有有效客户端证书的客户端才能访问受保护的资源。以下是详细的步骤指南:
如果你还没有安装Nginx,可以使用以下命令进行安装:
sudo apt update
sudo apt install nginx
首先,你需要创建一个证书颁发机构(CA)来签发客户端证书。
mkdir -p /etc/ssl/ssl-ca
cd /etc/ssl/ssl-ca
touch index.txt
echo 1000 > serial
openssl genrsa -out ca.key 2048
chmod 600 ca.key
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=YourCAName"
接下来,创建服务器证书和密钥。
openssl genrsa -out server.key 2048
chmod 600 server.key
openssl req -new -key server.key -out server.csr -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=yourdomain.com"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 500 -sha256
现在,创建客户端证书和密钥。
openssl genrsa -out client.key 2048
chmod 600 client.key
openssl req -new -key client.key -out client.csr -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=clientname"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256
编辑Nginx配置文件以启用客户端证书认证。
sudo nano /etc/nginx/sites-available/default
在server块中添加以下配置:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;
ssl_client_certificate /etc/ssl/certs/ca.crt;
ssl_verify_client on;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/html;
index index.html index.htm;
}
}
保存并关闭配置文件后,重启Nginx以应用更改:
sudo systemctl restart nginx
你可以使用浏览器或命令行工具(如curl)来测试客户端证书认证。
curl --cacert /etc/ssl/certs/ca.crt --cert /path/to/client.crt --key /path/to/client.key https://yourdomain.com
如果一切配置正确,你应该能够成功访问受保护的资源。
通过以上步骤,你可以在Ubuntu上使用Nginx配置客户端证书认证,确保只有持有有效客户端证书的客户端才能访问你的网站。