Nginx配置ssl自签名证书

3 minute read

一般来说根证书是第三方大的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;
    }
}