给tomcat和nginx配置https协议

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天

在命令行填写必要的参数:
A、输入keystore密码:此处需要输入大于6个字符的字符串
B、“您的名字与姓氏是什么?”这是必填项,并且必须是TOMCAT部署主机的域名或者IP[如:gbcom.com 或者 10.1.25.251],就是你将来要在浏览器中输入的访问地址
C、 “你的组织单位名称是什么?”、“您的组织名称是什么?”、“您所在城市或区域名称是什么?”、“您所在的州或者省份名称是什么?”、“该单位的两字母国 家代码是什么?”可以按照需要填写也可以不填写直接回车,在系统询问“正确吗?”时,对照输入信息,如果符合要求则使用键盘输入字母“y”,否则输入“n”重新填写上面的信息
D、输入<tomcat>的主密码,这项较为重要,会在tomcat配置文件中使用,建议输入与keystore的密码一致,设置其它密码也可以
l  完成上述输入后,直接回车则在你在第二步中定义的位置找到生成的文件

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>

3、上述配置完成后,重启TOMCAT后即可以使用SSL。IE地址栏中可以直接输入地址不必输入http://” 或者 https://” ;也可以输入 “http:// ” 会跳转成为 “https://” 来登录
 
证书转换:(参考别人的,生成的证书d:\lgy.com.keystore
常用证书格式:JKS(.keystore),微软(.pfx),OPSSL之PEM(.key + .crt),其中tomcat使用JKS格式,nginx使用PEM格式。
由于生成的证书是jks格式,nginx不能直接用,需要要转成PEM格式,这要用到jks2pfx工具进行转换。
jks2pfx的命令格式:JKS2PFX.bat keystore password alias exportname
keystore:KeyStore文件绝对路径
password:KeyStore文件对应的密码
alias:生成证书CSR时,所起的Alias别名
exportname:准备导出的文件名称 (不要带扩展名)
JKS2PFX.bat d:\lgy.com.keystore 123456 lgy.com exportfile
该命令将server.jks中别名为lgy.com的SSL证书导出,运行后将在jks2pfx的按照目录产生3个文件:
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/

posted on 2018-04-22 11:45  james-roger  阅读(1003)  评论(0编辑  收藏  举报