Nginx配置ssl自签名证书
一般来说根证书是第三方大的CA机构的,需要花钱。所以我们自建CA机构的私钥和根证书,再用它们来签发我们的服务器证书。
前置条件要安装openssl
1. 生成ca的私钥ca.key 默认2048位
openssl genrsa -out ca.key
2. CA的证书ca.crt的生成。用来签署server.csr请求文件。
利用私钥生成一个根证书的申请,一般证书的申请格式都是csr。所以私钥和csr一般需要保存好。 这里会要求输入国家、机构等信息,根据自身情况是否需要输入,不输入就直接回车即可。如果在此处设置了密码,那么以后使用它时需要输入该密码
openssl req -new -key ca.key -out ca.csr
3. 使用ca私钥签发ca.csr得到ca根证书为ca.crt, 证书有效期设置10年
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
4. 创建服务器的私钥server.key
创建服务器私钥和证书申请,并用ca的私钥和证书来签发得到服务器证书
openssl genrsa -out server.key
5. 此处和ca证书申请一样,根据需要输入信息
openssl req -new -key server.key -out server.csr
6. 利用ca私钥签发服务器server.csr得到服务器证书server.crt, 证书有效期设置10年
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
现在我们得到了好几个文件,其中比较重要的是下面四个:
ca.key:ca的私钥,妥善保管
ca.crt:ca的根证书,发给用户安装
server.key:服务器私钥,放在服务器中
server.crt:服务器证书,放在服务器中,用户请求时,会将它发给用户
7. Nginx配置
只需要把服务器私钥和服务器证书配置到nginx中即可
如下是一个最简单的server配置
server {
listen 80;
server_name localhost;
location / {
index index.html index.htm;
}
}
server {
#ssl参数
listen 443 ssl;
server_name localhost;
#服务器证书所在位置
ssl_certificate /usr/local/nginx/conf/ssl/server.crt;
#服务器私钥所在位置
ssl_certificate_key /usr/local/nginx/conf/ssl/server.key;
ssl_session_cache shared:SSL:1m;
#ssl session超时时间
ssl_session_timeout 5m;
#定义算法 ssl加密支持套件
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#ssl 链路支持协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#优先匹配服务端加密套件
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}