Nginx配置https

Posted 胡子就不刮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx配置https相关的知识,希望对你有一定的参考价值。

nginx配置https首先要获得证书和key(密钥),测试用例用java自带的keytool工具生成,由于我们证书是自己生成所以只能绑定一个域名,对于我们测试足够用了。

 

1 证书一般放在ngingx里的conf目录里

打开cmd命令窗口,指定使用RSA算法生成一个颁发证书的机构:

执行命令:keytool -genkey -alias haojing -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore C:/JavaSoftWare/nginx-1.14.0/conf/haojing.keystore -storepass 123456

注意:目录最好不要用绝对格式,可能会有意想不到的bug

 

 

2 以上设置可以随意,只是测试用例写的有点针对性,以上命令敲完以后在你相应目录下会生成一个文件

haojing.keystore

 

3 我们需要的证书和密钥都在这个keystore里,接下来我们生成cer证书,还是在该目录下

执行命令:keytool -export -alias haojing -keystore C:/JavaSoftWare/nginx-1.14.0/conf/haojing.keystore -storepass 123456 -rfc -file C:/JavaSoftWare/nginx-1.14.0/conf/haojing.cer

 

4 证书有了,接下里我们导出密钥,由于keytool不提供命令导出密钥,所以需要编写java类,测试类如下:

 

public class SslKey {

    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() {

        try {

            BASE64Encoder encoder = new BASE64Encoder();

            KeyStore ks = getKeyStore("C:/JavaSoftWare/nginx-1.14.0/conf/haojing.keystore", "123456");

            PrivateKey key = (PrivateKey) ks.getKey("haojing", "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;

        } catch (Exception e) {

            return null;

        }

}

 

    public static void main(String[] args) {

        getPrivateKey();

    }

}

 

5 执行完java程序控制台生成key

复制粘贴 保存文件命名为haojing,后缀为.key

 

 

6 到这一步,已经可以将cer证书(若需要crt证书,可以直接把cer证书文件的后缀改为crt即可)配置到nginx中使用。我们这边用的是crt证书,所以改下后缀

 

7 打开nginxnginx.conf文件,默认配置都是把https注销的,修改如下

 

 #HTTPS server

    server {

        listen       443 ssl;

        server_name  localhost;

 

ssl_certificate      C:/JavaSoftWare/nginx-1.14.0/conf/haojing.crt;

ssl_certificate_key  C:/JavaSoftWare/nginx-1.14.0/conf/haojing.key;

 

        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;

 

        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers  on;

 

         location / {

             root   html;

             index  index.html index.htm;

         }

}

 

8 重启nginx,访问 hppts://localhost

 

以上是关于Nginx配置https的主要内容,如果未能解决你的问题,请参考以下文章

Nginx——Nginx启动报错Job for nginx.service failed because the control process exited with error code(代码片段

Nginx配置文件详细介绍

Nginx 跨域

基于Nginx配置https证书

Nginx配置Https证书

为 Express 和 Nginx 配置 HTTPS