文档章节

HTTPS证书生成,Nginx + Tomcat 配置HTTPS

laudukang
 laudukang
发布于 2016/08/12 20:07
字数 959
阅读 160
收藏 4

一.OpenSSL安装

OpenSSL官网,或者参考 linux升级OpenSSL

中间可能会遇到 openssl.cnf 的问题,请使用 openssl-1.0.1t.tar.gz 包 apps下的 demoCA 和 openssl.cnf

二. 证书生成

a.单向认证,参考 Nginx单向认证的安装配置

openssl genrsa -des3 -out server.key 2048 #自定义密码

openssl req -new -key server.key -out server.csr

#---------------------------------------------------------------------------------------------------------------
Enter pass phrase for server.key: 自定义密码
Country Name (2 letter code) [XX]: CN                                           #国家
State or Province Name (full name) []: GD                                       #区域或是省份
Locality Name (eg, city) [Default City]: SZ                                     #地区局部名字
Organization Name (eg, company) [Default Company Ltd]: Test                     #机构名称:填写公司名
Organizational Unit Name (eg, section) []: Test                                 #组织单位名称:部门名称
Common Name (eg, your name or your server's hostname) []: *.domain.com          #网站域名
Email Address []: admin@domain.com                                              #邮箱地址
A challenge password []:                                                        #输入一个密码
An optional company name []:                                                    #一个可选的公司名称
#---------------------------------------------------------------------------------------------------------------

 

参考:怎么让nginx配置SSL安全证书重启免输入密码,不然Nginx、Tomcat使用该私钥启动的时候需要输入上面的密钥

openssl rsa -in server.key -out server.key.unsecure

 

再执行签名

openssl x509 -req -days 365 -in server.csr -signkey server.key.unsecure -out server.crt  #使用上面的密钥和CSR对证书进行签名

 

b.双向认证,参考 openssl生成SSL证书的流程

CA根证书的生成

# Generate CA private key   
openssl genrsa -out ca.key 2048   
# Generate CSR   
openssl req -new -key ca.key -out ca.csr  
# Generate Self Signed certificate(CA 根证书)  
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt 

用户证书的生成

# 服务器端用户证书
# private key  
openssl genrsa -des3 -out server.key 1024   
# generate csr  
openssl req -new -key server.key -out server.csr  
# generate certificate  
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key  

# 客户端用户证书
openssl genrsa -des3 -out client.key 1024   
openssl req -new -key client.key -out client.csr  
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

免密钥启动同上,TXT_DB error number 2 异常请参考 openssl TXT_DB error number 2

 

生成pem格式证书

有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成 

$cat client.crt client.key> client.pem 
$cat server.crt server.key > server.pem

 

三.Nginx、Tomcat配置HTTPS

nginx nginx.conf添加

server {
   listen       443 ssl;
   server_name  localhost;

   ssl_certificate      /work/openssl/single/server.crt;
   ssl_certificate_key  /work/openssl/single/server.key.unsecure;

   ssl_session_cache    shared:SSL:1m;
   ssl_session_timeout  5m;
   ssl_ciphers  HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers  on;

   location / {
            allow all; 
            proxy_pass https://192.168.1.121:443;
            proxy_set_header Host $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
   }

 

tomcat server.xml添加

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" SSLCertificateFile="/work/openssl/single/server.crt" SSLProtocol="SSLv2+SSLv3+TLSv1"
          SSLCertificateKeyFile="/work/openssl/single/server.key.unsecure" SSLVerifyClient="optional"/>

 

server.xml默认注释了

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

需要注意protocol中的 Http11AprProtocol 与 Http11NioProtocol,加密算法不支持的话,可能报异常 Java and SSL - java.security.NoSuchAlgorithmException

 

四.一个大坑

Ubuntu上跑Tengine,代理Windows上的应用,访问HTTPS页面时候总是报504错误,后来又报502错误,排查了一个多小时后发现是Windows系统安装了Vmware Workstation,而Vmware的VMware Authorization Service自动启动了,还有另外一个Vmware的服务忘记了,这两个服务会影响本地应用使用HTTPS,所以停止掉或禁用掉就可以了。

502	作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

504	作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。   注意:某些代理服务器在DNS查询超时时会返回400或者500错误

更多错误代码参考 HTTP状态码详解

 

五.更多参考资料

1. OpenSSL生成根证书CA及签发子证书

2. Windows下Tomcat+nginx配置证书实现登录页https访问

3. Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式

4. Nginx部署部分https与部分http

5. Nginx HTTPS 配置实践

 

© 著作权归作者所有

共有 人打赏支持
laudukang

laudukang

粉丝 80
博文 10
码字总数 5234
作品 0
深圳
程序员
私信 提问
开启全站HTTPS时代-Nginx SSL+tomcat集群

目录: 1、凭证申请 Let’s Encrypt 2、Nginx支持多域名ssl证书 3、Nginx强制使用https访问(http跳转到https) 4、配置 Tomcat SSL For Free 免费 SSL 凭证申请 Let’s Encrypt 什么是Let’s...

Javen205
2017/11/18
0
0
Windows下Tomcat+nginx配置证书实现登录页https访问

最近公司出于安全考虑,需要将登录页做成https访问,其他页面仍采用http访问,环境是Linux平台,web服务器采用Tomcat + Nginx。之前没接触过nginx,这两天网上查资料,试了好多,终于有点小成...

IceRainYWC
2012/08/27
0
1
nginx+tomcat+cas单点登录,退出登录无效,请大家帮忙

nginx做了反向代理,现在nginx全体转为https请求,转发到tomcat。nginx是openssl生成的证书。 给用户只开启80端口。 tomcat也只接收https请求,分为cas单点登录服务器和其他业务服务器。tom...

學楽
2016/12/09
1K
3
为nginx+tomcat增加ssl访问支持

昨天了解了一下ssl相关知识,然后动手将web服务器增加ssl访问支持。 服务器是——nginx反向代理+tomcat作为web服务器——这样的体系架构。 首先,使用openssl生成相关秘钥文件和证书,网上有...

yxzkm
2016/11/25
28
0
图文:CentOS 下对 Nginx + Tomcat 配置 SSL 实现服务器 / 客户端双向认证

安装 nginx 1.1 nginx 包及其依赖包下载 出于模块的依赖性,Nginx 依赖以下三个包: gzip 模块需要 zlib 库(http://www.zlib.net/); rewrite 模块需要 pcre 库(http://www.pcre.org/); ss...

chaun
2015/12/28
99
0

没有更多内容

加载失败,请刷新页面

加载更多

java常用设计模式

设计模式; 一个程序员对设计模式的理解: “不懂”为什么要把很简单的东西搞得那么复杂。后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“...

呵呵哒灬
10分钟前
0
0
Kafka入门

1、Kafka使用背景 在我们大量使用分布式数据库、分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词...

watermelon11
昨天
0
0
Cannot list resources Permission denied: user=Administrator, access=READ_EXECUTE, inode="/tmp"

Cannot list resources Permission denied: user=ÁõÎĺÁ, access=READ_EXECUTE, inode="/tmp":root:supergroup:drwx-wx-wx windows系统 Spring boot 整合hadoop时报错。 java.lang.Ille......

lwenhao
昨天
2
0
【结构型】- 享元模式

享元模式 作用:利用共享技术有效地支持大量细粒度对象的复用 享元模式状态 内部状态:在享元对象内部不随外界环境改变而改变的共享部分,存储于享元对象内部 外部状态:随着环境的改变而改变...

ZeroneLove
昨天
3
0
Vue 中使用UEditor富文本编辑器-亲测可用-vue-ueditor-wrap

一、Vue中在使用Vue CLI开发中默认没法使用UEditor 其中UEditor中也存在不少错误,再引用过程中。 但是UEditor相对还是比较好用的一个富文本编辑器。 vue-ueditor-wrap说明 Vue + UEditor + ...

tianma3798
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部