nginx+springboot配置Https

nginx+springboot配置Https

  • 使用javaJDK自带的keytool+openssl生成nginx SSL证书
    • keytool和Openssl生成密钥
    • nginx SSl配置
  • java Springboot配置
  • 问题与解决
    • nginx配置8081端口异常
    • centos上配置完nginx后访问报错403 failed (13: Permission denied)

必须nginx部署的前端和springboot开启的后端都需要配置SSL的密钥认证,这个两个认证最好一样(但是不一样好像也可以,如果密钥认证都下载)

使用javaJDK自带的keytool+openssl生成nginx SSL证书

keytool和Openssl生成密钥

1、使用jdk执行生成keystore密钥对

(-alias别名 –validity 3650表示10年有效,设置大小)

keytool -genkeypair -alias xxx -keyalg RSA -keysize 2048 -validity 3650 -keypass 123456 -storepass 123456 -keystore D://cert//server.keystore

2、把jks证书

keytool -importkeystore -srckeystore D:\cert\server.keystore -destkeystore D:\cert\server.p12 -srcstoretype JKS -deststoretype PKCS12

3、导出 cer证书

keytool -exportcert -file D:\cert\server.cer -alias xxx -keystore D://cert//server.keystore -storepass 123456

4、以下需安装openssl, 并打开openssl命令窗口

#windows下载链接 http://slproweb.com/products/Win32OpenSSL.html

建议下载1.1.1版本,3.0以上版本可能存在兼容性问题

linux查看openssl版本:openssl version

5、将cer格式证书转pem格式
openssl x509 -inform der -in D:\cert\server.cer -out D:\cert\server.pem

6、提取私钥
openssl pkcs12 -nocerts -nodes -in D:\cert\server.p12 -out D:\cert\server.key

nginx SSl配置

在server配置中添加如下内容

ssl_certificate   cert/server.pem;
ssl_certificate_key  cert/server.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

例如:

server {
listen       8081 ssl;
server_name  10.47.101.213;

ssl_certificate cert/server.pem;    
ssl_certificate_key cert/server.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location / {
root   /home/luxassets/dist; # 路径改成自己的dist路径
try_files $uri $uri/ /index.html;
index  index.html index.htm;
}        

location ^~/api/ {
proxy_pass https://10.47.101.213:8088/; #设置监控后端启动的端口
}
}

测试nginx.conf是否可用

nginx -t

然后重新载入设置

nginx -s reload

java Springboot配置

拷贝密钥库文件home.pkcs12到类路径下:可放在resources目录下,或其他java可查找到的类路径下

application.yml配置:

server:
  port: 8000
  ssl:
    key-store-type: PKCS12
    key-store: classpath:server.p12
    key-alias: xxx
    key-store-password: 123456

或者可以使用server.keystore

server:
  port: 8000
  ssl:
    key-store-type: JKS
    key-store: classpath:server.keystore
    key-alias: xxx
    key-store-password: 123456

问题与解决

nginx配置8081端口异常

为nginx配置8081端口,结果nginx报错。无法启动nginx
(nginx配置8081端口监听,通过查看日志,出现nginx: [emerg] bind() to 0.0.0.0:8081 failed (13: permission denied)异常。但是其它端口监听/访问正常。)

有效的解决方案:

(1)、检查已开放端口

sudo semanage port -l | grep http_port_t

(2)、如果8081端口未出现在列表中,则执行:

sudo semanage port -a -t http_port_t -p tcp 8081

(3)、通过将-a选项替换为-m for modify,将tcp port 8081添加到http_port_t所以有效的命令是:

semanage port -m -t http_port_t -p tcp 8081

centos上配置完nginx后访问报错403 failed (13: Permission denied)

日志报错信息为:“/home/web/manage/dist/index.html” failed (13: Permission denied)

**原因:**selinux的状态为可用状态,所以导致无法访问

解决方法:

3.1、vim /etc/selinux/config

3.2、将SELINUX=enforcing 修改为 SELINUX=disabled 状态。

3.3、然后重启:reboot

你可能感兴趣的:(java,nginx,https,spring,boot)