证书的制作
使用javaJDK自带的keytool+openssl生成nginx SSL证书
一、利用keytool工具生成密钥
1、准备文件的存储路径
mkdir /home/zs
cd /home/zs
2、使用jdk自带的工具keytool生成密钥
# -alias别名 –validity 3650表示10年有效,设置大小
keytool -genkeypair -alias xxx -keyalg RSA -keysize 2048 -validity 3650 -keypass 123456 -storepass 123456 -keystore server.keystore
注意事项:
①、-keysize 建议直接使用2048,使用1024时,nginx会出现如下错误
3、将server.keystore的JKS格式密钥库条目保存到server.p12的PKCS12格式的文件中
keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 -srcstoretype JKS -deststoretype PKCS12
4、导出cer证书
keytool -exportcert -file server.cer -alias xxx -keystore server.keystore -storepass 123456
注意事项:
-alias 别名要和server.keystore密钥库中的别名保持一致
二、利用openssl工具转换格式
1、将cer格式转pem格式
openssl x509 -inform der -in server.cer -out server.pem
2、提取私钥
openssl pkcs12 -nocerts -nodes -in server.p12 -out server.key
nginx的配置
1、server需要配置如下信息
ssl_certificate /etc/nginc/cert/server.pem; #证书
ssl_certificate_key /etc/nginx/cert/server.key; #私钥
ssl_session_timeout 5m;
#ssl_ciphers:是指SSL/TLS协议中使用的加密套件
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; #用于指定在客户端和服务器之间的握手过程中,应优先使用服务器的加密套件还是客户端的加密套件
SSL_protocols:
是指SSL/TLS协议的不同版本,这些协议用于在客户端和服务器之间建立安全的通信连接。
在选择SSL_protocols时,需要考虑以下几个因素:
安全性:应选择没有已知严重安全漏洞的协议版本。
兼容性:应选择与客户端和服务器都兼容的协议版本,以保证通信的可靠性。
常见的SSL_protocols包括:
SSLv2:这是最早的SSL协议版本,由于存在许多已知的安全漏洞,因此已经不再建议使用。
SSLv3:这是SSLv2的后续版本,修复了一些安全漏洞,但也有一些已知的问题,建议谨慎使用。
TLSv1.0:这是IETF(Internet Engineering Task Force)制定的TLS协议的第一个版本,广泛使 用,但也有一些已知的安全漏洞。
TLSv1.1:这是TLSv1.0的改进版本,提供了一些安全性的增强。
TLSv1.2:这是目前最广泛使用和推荐的协议版本,修复了以前版本中的一些安全漏洞,并提供了更好的安全性。
TLSv1.3:这是最新的TLS协议版本,进一步增强了安全性,并提供了一些性能改进。
在选择SSL_protocols时,推荐选择较新的协议版本,如TLSv1.2或TLSv1.3,以确保通信的安全性。同时,还需要根据服务器和客户端的支持情况进行选择,以确保兼容性。
2、listen需要配置
server {
listen 8081 ; #普通http请求
listen 8081 ssl; # https请求,注意https请求默认端口443
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/; #设置监控后端启动的端口
}
}
springboot的配置
springboot配置http和https请求
配置文件:
server:
port: 9000
ssl:
key-store-type: PKCS12
key-store: classpath:server.p12
key-alias: xxx
key-store-password: 123456
http:
port: 8000
添加http协议请求,需要代码配置来进行辅助
package com.zkzw.sms.conf;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Component
public class HttpConf {
@Value("${http.port}")
private Integer httpPort;
@Bean
public ServletWebServerFactory servletContainer(){
final Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(httpPort);
final TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
}