Aristotle
发布于 2023-11-18 / 3 阅读 / 0 评论 / 0 点赞

给NginX配置,利用jdk生成的自签名证书

给NginX配置,利用jdk生成的自签名证书

参考1:https://www.cnblogs.com/JaxYoun/p/12656641.html

参考2:https://developer.aliyun.com/article/877818

参考3:生成带SAN(主题备用名)的证书

一、生成证书

如果需要带SAN,keytool -genkey命令需要添加参数

命令中如果是IP方式访问用-ext SAN=ip:127.0.0.1,如果是域名用 -ext SAN=dns:www.123.com,注意“您的名字与姓氏是什么?”就是你的IP或域名,其他根据自己需要填写

这里使用自己生成的免费证书。在${JAVA_HOME}/bin 下可以看到keytool.exe,在改目录打开cmd然后输入:

keytool -genkey -v -alias tomcat -keyalg RSA -keystore d:\local.keystore -validity 36500

生成别名为 tomcat 名称为local.keystore的证书,有效期100年。然后密码什么的根据自己需求填写。
生成证书过程中:【你的名字】对应网站域名或IP。

二、转换证书

常用证书格式:JKS(.keystore),微软(.pfx),OPSSL之PEM(.key + .crt),其中tomcat使用JKS格式,nginx使用PEM格式。

由于生成的证书是jks格式,nginx不能直接用,需要要转成PEM格式,这要用到jks2pfx工具进行转换。
b.下载jks2pfx工具解压后,在解压目录打开cmd,然后输入:

JKS2PFX D:\local.keystore 123456 tomcat exportfile D:\Program Files\java\JDK7\jre7\bin

jks2pfx的命令格式:JKS2PFX keystore password alias exportname Java_Runtime_Folder

c.上面的命令是把d盘下的local.keystore(根据你自己keystore的位置来写)中别名为tomcat、密码是123456的SSL证书导出,运行后将在jks2pfx的解压目录下产生3个文件 exportfile.key、exportfile.crt、exportfile.pfx。本文只要用到exportfile.key、exportfile.crt,把这两个文件复制到${NGINX_HOME}/conf目录下。

jks2pfx工具

  1. 下载:JKS2PFX转换工具。

  2. 将压缩包解开到 c:\jks2pfx 目录下。

  3. 运行以下命令:JKS2PFX <导出文件名> [Java Runtime的目录]
    说明:

KeyStore文件:指Tomcat保存SSL证书的文件
KeyStore密码:KeyStore文件对应的密码
Alias别名:  生成证书CSR时,所起的Alias别名
导出文件名: 准备导出的文件名称 (不要带扩展名)

例如:

JKS2PFX server.jks 123456 tomcat exportfile

该命令需要在解压出来的jks2pfx目录下运行

该命令将server.jks中别名为tomcat的SSL证书导出,运行后将产生3个文件(当前目录下):
exportfile.key、exportfile.crt、exportfile.pfx;
其中exportfile.pfx可以导入到微软的IIS中使用;
exportfile.key和exportfile.crt可用于Apache、Nginx或者其他OpenSSL兼容的系统。

可以用下面命令查看PFX文件内容:

openssl pkcs12 -info -in exportfile.pfx

三、配置nginx

修改nginx.conf,把要实现https的server像下面这样配置:
HTTPS server

server {
   ssl on;
   listen       443 ssl;
   server_name  localhost;

   ssl_certificate      exportfile.crt;
   ssl_certificate_key  exportfile.key;

   ssl_session_cache    shared:SSL:10m;
   ssl_session_timeout  10m;

   ssl_ciphers  HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers  on;
}

重启nginx生效。

http的80端口请求自动重定向到https的443

server {
    listen 80;
    server_name yang_host;
    return 301 https://$server_name$request_uri;
}

server {
 	ssl on;
    listen 443;
    server_name yang_host;
}