jetty作为http长连接的轻量级容器,越来越受欢迎,配置https折腾一天特此记录。
#生成证书文件
keytool -genkey -alias xgjkey -keystore xgjkeystore -keypass xgjkeystorepass -storepass xgjkeystorepass -keyalg RSA -validity 3650 -dname "cn=xgj, ou=mengying, l=SZ, S=JS, o=Lively, c=CN"
#导出证书文件
keytool -alias xgjkey -exportcert -keystore xgjkeystore -file xgj.cer
#导入cer 至JAVA环境
keytool -keystore xgjkeystore -import -alias xgjkey -file C:\Users\lw\xgj.cer -trustcacerts
jetty 嵌入https的代码网上有一堆,大致如下:
SslContextFactory sslContextFactory = new SslContextFactory(keyStorePath);
sslContextFactory.setKeyStorePassword("xgjkeystorepass");
sslContextFactory.setKeyManagerPassword("xgjkeystorepass");
ServerConnector sslConnector = new ServerConnector(this.server, new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1
.toString()), new HttpConnectionFactory(httpConfig));
sslConnector.setPort(sslPort);
sslConnector.setAcceptQueueSize(100);
sslConnector.setIdleTimeout(500000);
注意:
1.配置https必须把证书导入到JAVA环境,linux环境最好是重新登录后启动应用。
2.不要配置sslContextFactory.setIncludeCipherSuites 加密方式,因为拷贝网上代码,导致无法访问,也无报错。
3.证书在chrom浏览器中不信任,需要手动确认。
nginx 配置ssl
# 生成一个RSA密钥
openssl genrsa -des3 -out xgj.key 1024
# 拷贝一个不需要输入密码的密钥文件
openssl rsa -in xgj.key -out xgj_nopass.key
# 生成一个证书请求
$ openssl req -new -key xgj.key -out xgj.csr
# 自己签发证书
$ openssl x509 -req -days 3650 -in xgj.csr -signkey xgj.key -out xgj.crt
配置ssl.conf
ssl on;
ssl_certificate /etc/nginx/conf.d/xgj.crt;
ssl_certificate_key /etc/nginx/conf.d/xgj_nopass.key;