nginx配置ssl认证启用https加密(windows版)

一、简介

nginx到客户端的连接通过HTTPS加密,实现了安全隔离。本文在windows中使用keytool生成证书和私钥实现ssl认证。

二、nginx开启server块的ssl

使用listen指令的ssl参数激活了SSL模块。

完整的配置:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 8088 default ssl;
        server_name  localhost;
	    proxy_read_timeout 300s;
	    proxy_connect_timeout 300s;
	    proxy_send_timeout 300s;
	    #ssl配置
	    ssl_prefer_server_ciphers on;
	    ssl_protocols TLSv1 SSLv3;ssl_ciphers RC4:HIGH:!aNULL:!MD5:@STRENGTH;	
	    ssl_session_cache shared:WEB:10m;
	    ssl_certificate C:\Users\yangjianzhang\Desktop\server.crt;
	    ssl_certificate_key C:\Users\yangjianzhang\Desktop\server.key;

	    #开启header的下划线支持:
	    underscores_in_headers on;
	    proxy_set_header Host $host;
	    proxy_set_header X-Real-IP $remote_addr;
	
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    #设置向后端proxy发送X-Forwarded-Proto字段
	    proxy_set_header X-Forwarded-Proto  http;

        location /test {
            proxy_pass  http://127.0.0.1:8080/;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
   }
}

三、生成证书和私钥

nginx配置中需要ssl_certificate(证书)和ssl_certificate_key(私钥)

证书中包含了公钥,所以只要证书和私钥即可

1.生成证书库

keytool -genkeypair -alias server -keyalg RSA -keystore C:\Users\yangjianzhang\Desktop\server.keystore

2.导出证书

keytool -export -alias server -keystore C:\Users\yangjianzhang\Desktop\server.keystore -storepass 123456 -rfc -file C:\Users\yangjianzhang\Desktop\server.crt

3.生成私钥

使用java代码生成key(也可以使用openssl转换),将输出的内容放到server.key文件中

import sun.misc.BASE64Encoder;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;

public class RsaDoMain {
    public static void main(String[] args) throws Exception {
        getPrivateKey();
    }

    public static KeyStore getKeyStore(String keyStorePath, String password) throws Exception {
        FileInputStream is = new FileInputStream(keyStorePath);
        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(is, password.toCharArray());
        is.close();
        return ks;
    }

    public static PrivateKey getPrivateKey() throws Exception {
        BASE64Encoder encoder = new BASE64Encoder();
        KeyStore ks = getKeyStore("C:/Users/yangjianzhang/Desktop/server.keystore", "123456");
        PrivateKey key = (PrivateKey) ks.getKey("server", "123456".toCharArray());
        String encoded = encoder.encode(key.getEncoded());
        System.out.println("-----BEGIN RSA PRIVATE KEY-----");
        System.out.println(encoded);
        System.out.println("-----END RSA PRIVATE KEY-----");
        return key;
    }
    
}

四、测试

1.启动nginx

2.测试接口 

五、参考文献

JAVA利用keytool工具生成.crt和.key文件 - 程序员大本营

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值