自签名证书支持https

第1步:生成私钥

  • 生成rsa私钥,des3算法,1024位强度,ssl.key是秘钥文件名。
    openssl genrsa -des3 -out ssl.key 1024

  • 然后他会要求你输入这个key文件的密码,由你随便设置。

  • 由于以后要给nginx使用。每次reload nginx配置时候都要你验证这个密码。如果不想以后那么麻烦,生成文件之后可以执行如下命令删掉密码。
    openssl rsa -in ssl.key -out ssl.key

第2步:生成CSR(证书签名请求)

  • 根据刚刚生成的key文件来生成证书请求文件

openssl req -new -newkey rsa:2048 -nodes -subj '/' -key ssl.key -out ssl.csr主题可以空着,但是不能不写这个参数,不然会让你一行一行输入
openssl req -new -newkey rsa:2048 -nodes -subj '/C=CN/ST=GuangDong/L=Shenzhen/O=yalong/OU=yalong/CN=yalong.site' -key ssl.key -out ssl.csr 如果想详细描述你的证书,可以用这个命令

第3步:生成自签名证书

  • 根据以上2个文件生成crt证书文件,执行下面命令
  • 这里3650是证书有效期(单位:天)。最后使用到的文件是key和crt文件。
    openssl x509 -req -days 3650 -in ssl.csr -signkey ssl.key -out ssl.crt

第4步:配置nginx证书

添加以下内容,以下配置可以同时支持http和https

server
    {
        listen 80; # 同时监听80和443
        listen 443 ssl; # 末尾的ssl不能去掉
        ssl_certificate "/root/ssl.crt"; # 生成的证书文件路径
        ssl_certificate_key "/root/ssl.key"; # 第一步的key文件路径

	# 一些可有可无的配置
        ssl_session_cache shared:SSL:1m;  
        ssl_session_timeout 5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;

        # 真实服务地址
        location ~ .* {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        
	# 如果是http,转发到https
        if ($server_port = 80 ) {
            return 301 https://$host$request_uri;
        }

	 location ~ /\.
        {
            deny all;
        }
}

结果展示

会提示不安全,但是可以用https方式访问

注意点

  • 记得开启443端口防火墙
  • nginx配置完记得重新加载配置,nginx -s reload
posted @ 2021-03-02 17:32  rm-rf*  阅读(183)  评论(0编辑  收藏  举报