1 生成自签名证书(生成证书方式一)
# 生成私钥:server.key
[root@localhost ~]# openssl genrsa -out server.key 2048
# 生成证书请求文件:server.csr
[root@localhost cert]# openssl req -new -key server.key -out server.csr
Country Name (2 letter code) [XX]:cn 《==这里填国家
State or Province Name (full name) []:guangdong 《==这里填省份
Locality Name (eg, city) [Default City]:shenzhen 《==这里填城市
Organization Name (eg, company) [Default Company Ltd]:xxx公司 《==这里填公司名称
Organizational Unit Name (eg, section) []:xxx部门 《==这里填公司部门
Common Name (eg, your name or your server's hostname) []:www.example.com 《==这里网站域名或者IP
# 自签名方式-生成证书文件:server.crt
[root@localhost cert]# openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365000
Signature ok
subject=/C=cn/ST=guangdong/L=shenzhen/O=das/OU=ma/CN=www.das.com
Getting Private key
生成完毕后,实际有用的只有 server.key 和 server.crt文件
2、模拟CA机构方式生成证书(生成证书方式二)
在 OpenSSL 中生成证书时,-CAkey 选项用于指定 CA(证书颁发机构)的私钥文件。这个私钥文件用于签署生成的证书,从而证明证书是由该 CA 颁发的。
以下是一个使用 OpenSSL 生成证书并涉及 -CAkey 选项的示例流程:
生成 CA 的私钥和自签名证书(如果还没有):
#生成 CA 的私钥
openssl genpkey -algorithm RSA -out ca.key -pkeyopt rsa_keygen_bits:2048
#生成 CA 的自签名证书
openssl req -new -x509 -key ca.key -out ca.crt -days 3650
这里,ca.key 是 CA 的私钥文件,ca.crt 是 CA 的自签名证书文件。
生成服务器或客户端的私钥和证书签名请求(CSR):
#生成服务器或客户端的私钥
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048
#生成证书签名请求(CSR)
openssl req -new -key server.key -out server.csr
这里,server.key 是服务器或客户端的私钥文件,server.csr 是生成的 CSR 文件。
#使用 CA 的私钥和自签名证书签署 CSR:
#使用 CA 的私钥和自签名证书签署 CSR,生成最终证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server-cert.pem -days 3650000
#这里,-CA ca.crt 指定 CA 的自签名证书,-CAkey ca.key 指定 CA 的私钥文件,-out server.crt 指定生成的最终证书文件,-days 3650000指定证书的有效期。
验证生成的证书(可选):
#验证证书
openssl x509 -in server.crt -text -noout
这个命令会显示证书的详细信息,包括颁发者、有效期、公钥等。
总结:
-CAkey 选项用于指定 CA 的私钥文件。
生成证书时,需要 CA 的私钥来签署 CSR,从而生成最终证书。
希望这个示例能帮助你理解如何在 OpenSSL 中使用 -CAkey 选项生成证书。
注:上文是使用自签名方式生成证书,你也可以先证书一个
2 修改nginx.conf
server {
listen 80;
server_name localhost;
# 将所有http请求自动跳转至https
return 302 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name localhost;
# ssl配置
ssl_certificate /上文生成的的证书目录路径/server.crt; # 证书文件路径
ssl_certificate_key /上文生成的的证书目录路径/server.key; # 私钥文件路径
ssl_session_timeout 5m; # ssl会话信息保留时间
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 仅启用安全的 TLS 版本
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 指定强大的加密套件(用于对称和非对称加密算法)
ssl_prefer_server_ciphers on; # 优先使用服务器端的加密套件
client_max_body_size 100m; # 客户端请求体的最大允许大小;
# ... 以下是你配置文件的其他配置
}