1 生成密匙:进入jdk的bin目录后输入:
keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "g:\tomcat.keystore" -validity 36500
参数简要说明:“g:\tomcat.keystore”含义是将证书文件保存在F盘,证书文件名称是tomcat.keystore ;“-validity 36500”含义是证书有效期,36500表示100年,默认值是90天
1处我输入的密码是tomcat,2处是访问的地址,3处和1处的密码一样
配置TOMCAT服务器
433是https的默认端口
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 修改成 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" URIEncoding="UTF-8"/>
<!-- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"/> --> 去掉注释且修改参数=> <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="G:/ssl/tomcat.keystore" keystorePass="tomcat" />
标识为粉红色的两个参数,分别是证书文件的位置和<tomcat>的主密码,在证书文件生成过程中做了设置
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 修改成 <Connector port="8009" protocol="AJP/1.3" redirectPort="443" />
启动tomcat,访问地址:https://localhost/ 或 http://localhost:8080/ 成功
2.强制https访问
在tomcat\conf\web.xml中的</welcome-file-list>后面加上这样一段:
Java代码
1. <login-config>
2. <!-- Authorization setting for SSL -->
3. <auth-method>CLIENT-CERT</auth-method>
4. <realm-name>Client Cert Users-only Area</realm-name>
5. </login-config>
6. <security-constraint>
7. <!-- Authorization setting for SSL -->
8. <web-resource-collection >
9. <web-resource-name >SSL</web-resource-name>
10. <url-pattern>/*</url-pattern>
11. </web-resource-collection>
12. <user-data-constraint>
13. <transport-guarantee>CONFIDENTIAL</transport-guarantee>
14. </user-data-constraint>
15. </security-constraint>
由于生成的证书是jks格式,nginx不能直接用,需要要转成PEM格式,这要用到jks2pfx工具进行转换。
keystore:KeyStore文件绝对路径
password:KeyStore文件对应的密码
alias:生成证书CSR时,所起的Alias别名
exportname:准备导出的文件名称 (不要带扩展名)
exportfile.key、exportfile.crt、exportfile.pfx;
windows配置nginx
将exportfile.key、exportfile.crt复制到nginx的conf目录,并将exportfile.crt重命名未exportfile.pem
配置nginx.conf,打开https:
server {
listen 80;
server_name localhost;
#将http请求自动跳转到https上
return 301 https://$server_name$request_uri;
}
server {
#监听443端口
listen 443 ssl;
server_name localhost;
#证书路径。从conf开始找
ssl_certificate exportfile.pem;
ssl_certificate_key exportfile.key;
//windows环境必须注释下面这行
#ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /file {
alias C:/file;
index index.html index.htm;
autoindex on;
}
location / {
#反向代理http://127.0.0.1:8080
proxy_pass http://127.0.0.1:8080;
}
}
linux环境给nginx配置https
centos7部署和windows差不多,如果是centos7使用的docker部署nginx,则记得映射443端口,将两个证书文件上传到nginx容器的/etc/nginx目录下
下面以docker启动的nginx为例:
修改default.conf文件内容,新增如下内容:
server { #监听443端口 listen 443 ssl; server_name localhost; #证书路径。从conf开始找 ssl_certificate exportfile.pem; ssl_certificate_key exportfile.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; #测试信息 location /file { alias /add/upfiles; index index.html index.htm; autoindex on; } }
如果nginx配置https出现如下错误:
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module
Nginx开启SSL模块,下面这个是自己的nginx源码解压目录
1、cd /usr/local/src/nginx-1.8.1
2、查看nginx原有的模块
/usr/local/nginx/sbin/nginx -V
3.在configure arguments:后面显示的原有的configure参数如下:
–prefix=/usr/local/nginx
4、 新配置信息就应该这样写:
./configure --prefix=/usr/local/nginx --with-http_ssl_module
5、配置完成后,运行命令
make
6、备份原有已安装好的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
7.将刚刚编译好的nginx覆盖掉原有的nginx(nginx停止状态)
cp ./objs/nginx /usr/local/nginx/sbin/
8、然后启动nginx
./nginx -c /usr/local/nginx/sbin/