nginx ssL +tomcat实现https-阿里云开发者社区

开发者社区> 技术小阿哥> 正文

nginx ssL +tomcat实现https

简介:
+关注继续查看

参考

http://ntxjxp.blog.51cto.com/11279216/1766579

http://www.cnblogs.com/bass6/p/6228902.html

http://szcto.blog.51cto.com/2463527/1891867

原理

X-Forwarded-Proto 就是为了正确地识别实际服务发出的协议是 http 还是 https,就比如上图表示的就是本地所有的服务发出的协议都是https,那么接下来的

思路也很明确,就是tomcat上的服务也接受https

在生产环境中,可以能有特殊的情况,如要保持原有端口生效的情况下,并443端口生效。我公司开始用的 haproxy做反向代理,后来用nginx 配https,便 443端口生效。也就是同时开启原有的haproxy使原有的端口生效,ngix配的https的443端口同时也生效。也就是不同的端口代理到后端相同的端口。这样就能兼容原有端口的同时,也兼容了443端口。


配置

nginx的配置文件

wKiom1cZiOWCFsZyAABc9HD2kos555.png

1
<span style="font-size:18px;">server {<br>listen 443; server_name localhost;<br>ssl on;<br>root html;<br>index index.html index.htm;<br>ssl_certificate   磁盘目录/订单号.pem;<br>ssl_certificate_key  磁盘目录/订单号.key;<br>ssl_session_timeout 5m;<br>ssl_protocols TLSv1 TLSv1.1 TLSv1.2;<br>ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;<br>ssl_prefer_server_ciphers on;<br>location / {<br>root html;<br>index index.html index.htm;<br>}<br>}<br><br></span>

tomcat的server.xml配置

wKioL1cZifaCVQGiAABkOizynNQ298.png


proxyPort代理端口配置443,是接受来自(1)里发来的https前提,当然如果某同学涉及到redis的话,也需要将redistport改成443,道理一样。接下来就是

Valve模块,此模块只能存在一个,想当初我配了2个,这都是泪啊,此处为标准安全策略配置,格外注意portocolHeader的值,你比对比对就知道什么意思了


nginx+tomcat配置完成。


apache 配置文档

安装证书
( 1 ) 打开 apache 安装目录下 conf 目录中的 httpd.conf 文件,找到

#LoadModule ssl_module modules/mod_ssl.so (如果找不到请确认是否编译过 openssl 插件)
#Include conf/extra/httpd_ssl.conf

( 2 ) 打开 apache 安装目录下 conf/extra 目录中的 httpd-ssl.conf 文件 ( 注释:yum 安装配置目录:conf.d/ssl.confubuntu/apache2 安装目录:conf/sites-enabled/*.conf ), 在配置文件中查找以下配置语句:

·添加 SSL 协议支持语句,关闭不安全的协议和加密套件
SSLProtocol all -SSLv2 -SSLv3
·修改加密套件如下
SSLCipherSuite AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
·将服务器证书公钥配置到该路径下(在 conf 目录下创建 ssl 目录,将 for Apache 里面的三 个证书文件拷贝到 ssl 目录下)
SSLCertificateFile conf/ssl/public.pem (证书公钥)
·将服务器证书私钥配置到该路径下
SSLCertificateKeyFile conf/ssl/订单号.key (证书私钥)
·将服务器证书链配置到该路径下
SSLCertificateChainFile conf/ssl/chain.pem (证书链)删除行首的“#”号注释符

保存退出。
( 3 ) 重启 Apache。重启方式:进入 Apache 安装目录下的 bin 目录,运行如下命令 ./apachectl -k stop./apachectl -k start



tomcat配置文档


安装证书
Tomcat支持JKS格式证书,从Tomcat7开始也支持PFX格式证书,两种证书格式任选其一。下载包中包含PFX格式证书和密码文件。1、PFX证书安装

找到安装 Tomcat 目录下该文件server.xml,一般默认路径都是在 conf 文件夹中。找到 <Connection port="8443" 标签,增加如下属性:

keystoreFile="/你的磁盘目录/订单号.pfx"keystoreType="PKCS12"keystorePass="证书密码"完整的配置如下,其中port属性根据实际情况修改:<Connector port="8443" protocol="HTTP/1.1"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    keystoreFile="/你的磁盘目录/订单号.pfx"
    keystoreType="PKCS12"
    keystorePass="证书密码"
    sslEnabledProtocols="TLSv1"
    clientAuth="false" sslProtocol="TLS" />2、JKS证书安装
( 1 ) 使用java jdk将PFX格式证书转换为JKS格式证书(windows环境注意在%JAVA_HOME%/jdk/bin目录下执行)

keytool -importkeystore -srckeystore 订单号.pfx -destkeystore your-name.jks -srcstoretype PKCS12 -deststoretype JKS

回车后输入一次PFX证书密码,然后输入两次要设置的JKS证书密码,并牢记此证书密码。
( 2 ) 找到安装 Tomcat 目录下该文件Server.xml,一般默认路径都是在 conf 文件夹中。找到 <Connection port="8443" 标签,增加如下属性:

keystoreFile="/你的磁盘目录/your-name.jks"keystorePass="证书解压密码"完整的配置如下,其中port属性根据实际情况修改:<Connector port="8443" protocol="HTTP/1.1"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    keystoreFile="/你的磁盘目录/your-name.jks"
    keystorePass="证书解压密码"
    clientAuth="false" sslProtocol="TLS" />( 注意:不要直接拷贝所有配置,只需添加 keystoreFile,keystorePass,keystorePass等参数即可,其它参数请根据自己的实际情况修改 )


注意点

这时候,你就可以打开浏览器访问一下试试了。正常情况 HTTPS 请求是打不开的,因为我们还没设置防火墙,记得要开放443端口!,嗯,设置过防火墙就可以正常访问了吧。

其实到这里,这个服务器支持 HTTPS 请求流程已经结束了,但是你发现好多人在浏览器地址栏输入域名的时候都不输入http://https://的,因为浏览器会自动帮我们加上http://的,所以,这时候输入我们刚刚设置的域名其实还是没有走https://请求,那怎么让就是输入http://也走HTTPS呢?

很简单,Nginx 中这样配置就行啦!

server {    listen  80;    server_name  www.domain.com;    rewrite ^(.*)$  https://$host$1 permanent;
}

我们利用rewrite来做跳转。监听到80端口的 HTTP 请求后,就转发到 HTTPS ,当然还有好多处理方式。



本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1946831,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9484 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2462 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9049 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13167 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4008 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6886 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
21894 0
13694
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载