tomcat配置了ssl证书,https访问443端口无法安全连接,但是8443端口就可以正常访问,
申请了免费的ssl证书,配置好了后,https访问443端口无法安全连接,但是改为8443端口,https就可以正常访问了。加了安全组,443也没有被占用。
tomcat配置了ssl证书,https访问443端口无法安全连接,但是8443端口就可以正常访问,
tomcat配置了ssl证书,https访问443端口无法安全连接,但是8443端口就可以正常访问,
tomcat配置了ssl证书,https访问443端口无法安全连接,但是8443端口就可以正常访问,
tomcat配置了ssl证书,https访问443端口无法安全连接,但是8443端口就可以正常访问,
问答
域名解析 · 弹性计算 · 安全 · 应用服务中间件 · 网络安全 · 云计算
2019-07-08
Linux下装Tomcat安装并使用
Linux下安装jdk7
跟着上一篇博文,我们继续利用WinSCP上传tomcat到linux。同时也放在opt下。
Tomcat的安装 解压缩
# mkdir /usr/local/tomcat
# cd /usr/local/tomcat
# tar -zxvf /software/apache-tomcat-7.0.54.tar.gz
生成链接以便版本升级
# ln -s apache-tomcat-7.0.54 server
启动Tomcat
# cd /usr/local/tomcat/server/bin
# ./startup.sh
启动成功了。
这个时候我们在本地访问以下tomcat测试成功了没。
如果不能成功很有可能是防火墙的原因。
打开防火墙,使外部能访问
# /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
# service iptables save
# service iptables restart
或直接修改文件/etc/sysconfig/iptables.
# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
停止Tomcat
# ./shutdown.sh
下面介绍下,Tomcat的使用
1. 配置web管理帐号
修改文件conf/tomcat-users.xml,在<tomcat-users>元素中添加帐号密码,需要指定角色.
# vi /usr/local/tomcat/server/conf/tomcat-users.xml
<tomcat-users>
<user name="admin" password="admin" roles="admin-gui,manager-gui" />
</tomcat-users>
2.配置web访问端口
可以修改conf目录下的文件server.xml,修改Connector元素(Tomcat的默认端口是8080),需要重新启动Tomcat服务生效.
# vi /usr/local/tomcat/server/conf/server.xml
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
3.配置https安全连接(ssl加密连接)
https连接需要用到数字证书与数字签名(MD5算法)
网站https连接首先需要申请数字证书,配置加密连接器,浏览器安装证书.
·使用java的工具keytool产生数字证书
# keytool -genkey -alias tomcat -keyalg RSA
生成文件.keystore
注意:CN为主机名称,本机可用localhost
·将文件.keystore放到Tomcat服务器的conf目录下
# cp .keystore /usr/local/tomcat/server/conf/
·修改conf/server.xml文件,修改加密连接器,添加keystoreFile与keystorePass
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/.keystore" keystorePass="123456"/>
·重新启动tomcat.浏览器输入https://localhost:8443访问,并安装证书.
4.Tomcat的目录结构
·bin //存放Tomcat的命令脚本文件
·conf //存放Tomcat服务器的各种配置文件,最主要是server.xml
·lib //存放Tomcat服务器支撑jar包
·logs //存放日志文件
·temp //存放临时文件
·webapps //web应用所在目录,外界访问web资源的存放目录
·work //Tomcat的工作目录
5.web应用的目录结构
webapp – web应用所在目录
|— html, jsp, css, js文件等 – 这些文件一般在web应用根目录下,根目录下的文件外界可以直接访问.
|— WEB-INF 目录 – java类、jar包、web配置文件存在这个目录下,外界无法直接访问,由web服务器负责调用.
|— classes 目录 – java类
|— lib 目录 – java类运行所需要的jar包
|— web.xml 文件 – web应用的配置文件
6.虚拟主机的配置
指定虚拟主机名,修改conf/server.xml,添加<host>元素.
<host name="hostname.domainname" appBase="/webapps">
<Context path="/webapp" docBase="/webapps/webapp"/>
</host>
例:
<host name="www.163.com" appBase="/webapps">
</host>
<host name="mail.163.com" appBase="/mailapps">
</host>
须设置DNS解析(host文件或DNS系统).
7.web应用和虚拟目录的映射.
可以修改xml配置文件的<Context>元素来设置web应用和虚拟目录的映射.
·conf/server.xml //在<host>元素下添加<Context path="/webdir" docBase="/webappdir"/>,需要重新启动Tomcat服务生效,不建议使用.
·conf/context.xml //添加<Context>元素所有web应用有效.
·conf/[enginename]/[hostname]/context.xml.default //[enginename]一般是Catalina,主机[hostname]的所有web应用有效.
·conf/[enginename]/[hostname]/ //在目录下任意建一个文件(扩展名xml),文件名即为虚拟目录名.多级目录使用#分割. <Context docBase="/webappdir"/>//缺省值web应用目录可以定义为ROOT.xml,添加<Context docBase="/webappdir"/>,需重新启动Tomcat服务器.
·META-INF/context.xml //
可以将web应用放在webapps目录下让Tomcat服务器自动映射,适用开发环境,实际运用环境中不用自动映射。
如没有修改配置文件,web应用目录为ROOT时则为默认web应用。
8.web应用首页(welcome file)的配置
修改web应用的配置文件: [webapp]/WEB-INF/web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
文章
Java · Linux · 数据安全/隐私保护 · 应用服务中间件 · 网络协议 · 网络安全 · 数据格式 · XML · 前端开发 · JavaScript
2016-11-13
在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
本件详细介绍了如何通过几个简单步骤在 Tomcat 中配置 SSL/TLS 、使用 JDK 生成自签名的证书,最终实现在应用中支持 HTTPS 协议。
生产密钥和证书
Tomcat 目前只能操作 JKS、PKCS11、PKCS12 格式的密钥存储库。JKS 是 Java 标准的“Java 密钥存储库”格式,是通过 keytool 命令行工具创建的。该工具包含在 JDK 中。PKCS12 格式一种互联网标准,可以通过 OpenSSL 和 Microsoft 的 Key-Manager 来。
创建一个 keystore 文件保存服务器的私有密钥和自签名证书:
Windows:
"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
UNIX:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
执行该命令后,首先会提示你提供 keystore 的密码。Tomcat 默认使用的密码是 changeit(全部字母都小写),当然你可以指定一个自定义密码(如果你愿意)。同样,你也需要将这个自定义密码在 server.xml 配置文件内进行指定,稍后再予以详述。
接下来会提示关于证书的一般信息,比如组织、联系人名称,等等。当用户试图在你的应用中访问一个安全页面时,该信息会显示给用户,所以一定要确保所提供的信息与用户所期望看到的内容保持一致。
最后,还需要输入密钥密码(key password),这个密码是这一证书(而不是存储在同一密码存储库文件中的其他证书)的专有密码。keytool 提示会告诉你,如果按下回车键,则自动使用密码存储库 keystore 的密码。当然,除了这个密码,你也可以自定义自己的密码。如果选择自定义密码,那么不要忘了在 server.xml 配置文件中指定这一密码。
下面是详细步骤:
C:\Users\admin>"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
您的组织单位名称是什么?
您的组织名称是什么?
您所在的城市或区域名称是什么?
您所在的省/市/自治区名称是什么?
该单位的双字母国家/地区代码是什么?
CN=waylau, OU=waylau.com, O=waylau.com, L=hangzhou, ST=zhejiang, C=china是否正确
?
输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车):
如果操作全部正常,我们现在就会创建一个新的 JKS 密码存储库,该密码库包含一个自签名的证书。创建一个新的 JKS 密码存储库,该密码库包含一个自签名的证书。
该命令将在用户的主目录下创建一个新文件:.keystore。
要想指定一个不同的位置或文件名,可以在上述的 keytool 命令上添加 -keystore 参数,后跟到达 keystore 文件的完整路径名。你还需要把这个新位置指定到 server.xml 配置文件上,见后文介绍。例如:
Windows:
"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA -keystore \path\to\my\keystore
Unix:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore /path/to/my/keystore
修改配置
取消对 Tomcat 安装目录下 /conf/server.xml 中 “SSL HTTP/1.1 Connector” 一项的注释状态,并制定 keystore 的路径和密码:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="${user.home}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
Tomcat 指定了 8443 端口为 HTTPS 访问端口。
如果要隐藏端口号,就要把 Tomcat 的 HTTPS 端口设为 443
若想把所有 HTTP 请求都转到 HTTPS 协议上,可以修改tomcat的conf下的web.xml,在 节点下方 添加如下:
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
其中, 是配置文件过滤策略,比如,只对 .jsp 的请求自动转化为HTTPS ,配置如下:
<security-constraint>
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
在 中可以配置你希望自动转化的请求路径 /* 、 login.html 、 login.jsp 等等。
效果
首先,浏览器访问没有 HTTPS 支持的页面,http://localhost:8080
接着,浏览器访问 HTTPS 的页面:https://localhost:8443/
当用户首次访问你站点上的安全页面时,页面通常会提供给他一个对话框,包含证书相关细节(比如组织及联系方式等),并且询问他是否愿意承认该证书为有效证书,然后再进行下一步的事务。一些浏览器可能会提供一个选项,允许永远承认给出的证书的有效性,这样就不会在用户每次访问站点时打扰他们了。但有些浏览器不会提供这种选项。一旦用户承认了证书的有效性,那么在整个的浏览器会话期间,证书都被认为是有效的。
火狐浏览器提示
此连接不受信任
您想使用 Firefox 安全连接至 localhost:8443,但是我们无法确认此连接是否安全。
通常,当您尝试安全连接时,站点会出示受信任的凭据,以证明您访问的是正确的位置。然而现在,此网站的身份无法核实。
怎么办?
如果您过去曾连接到此网站且没有遇到该问题,那么此错误表示可能有人试图冒充该网站,因此您应该停止浏览。
localhost:8443 使用了无效的安全证书。
该证书因为其自签名而不被信任。
该证书仅对 waylau 有效。
(错误码: sec_error_unknown_issuer)
如果您了解现在所发生的一切,您可以让 Firefox 开始信任此站点的凭据。即便您信任此站点,这个错误也可能表明有人试图干涉您的连接。
不要随便添加例外,除非您知道并认同该网站不使用受信任标识的理由。
而谷歌浏览器则提示如下:
总结
虽然 SSL 协议的意图是尽可能有助于提供安全且高效的连接,但从性能角度来考虑,加密与解密是非茶馆耗费计算资源的,因此将整个 Web 应用都运行在 SSL 协议下是完全没有必要的,开发者需要挑选需要安全连接的页面。对于一个相当繁忙的网站来说,通常只会在特定页面上使用 SSL 协议,也就是可能交换敏感信息的页面,比如:登录页面、个人信息页面、购物车结账页面(可能会输入信用卡信息),等等。应用中的任何一个页面都可以通过加密套接字来请求访问,只需将页面地址的前缀 http: 换成 https: 即可。
参考引用
http://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html
文章
存储 · 安全 · 应用服务中间件 · 网络安全 · 数据安全/隐私保护 · Java · Web App开发 · Windows · Unix · 开发者
2016-05-18
Tomcat配置SSL
本篇博文不讲概念,只介绍如何在Tomcat中配置SSL,以支持Https协议。如果图中与正文描述不符,以正文为主,部分图片是借鉴的。
一、创建证书
证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书;这里由于是演示,所以就自己用JDK自带的keytool工具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买,证书认证一般都是由VeriSign认证,中文官方网站:http://www.verisign.com/cn/
用JDK自带的keytool工具生成证书:
keytool -genkey -alias wsria -keyalg RSA -keystore d:/keys/wsriakey
无图不给力,有图有真相:
二、修改hosts
具体的输入项图片中都有说明,有一点我要解释一下;在输入完密码后提示输入域名是我输入的是sso.wsria.com,其实这个域名是不存在的,但是我为了演示所以虚拟了这个域名,技巧在于修改
C:\Windows\System32\drivers\etc\hosts
添加内容如下:
127.0.0.1 sso.wsria.com
这样在访问sso.wsria.com的时候其实是访问的127.0.0.1也就是本机
严重提醒:提示输入域名的时候不能输入IP地址
如果你想立马看到效果,现在可以直接跳转到第五步了。
三、导出证书
keytool -export -file d:/keys/wsria.crt -alias wsria -keystore d:/keys/wsriakey
特别提示:如果提示:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
那么请输入密码:changeit
来点颜色:
至此导出证书完成,可以分发给应用的JDK使用了,接下来讲解客户端的JVM怎么导入证书。
四、为客户端的JVM导入证书
keytool -import -keystore "C:\Program Files\Java\jdk1.7.0_71\jre\lib\security\cacerts" -file D:/keys/wsria.crt -alias wsria
keytool -import -keystore "C:\Program Files\Java\jre7\lib\security\cacerts" -file D:/keys/wsria.crt -alias wsria
特别提示:如果提示:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
那么请输入密码:changeit
来点颜色瞧瞧:
特别说明
C:\Program Files\Java\jdk1.7.0_71\jre\lib\security\cacerts -- 是jre的目录;密码还是刚刚输入的密码。至此证书的创建、导出、导入到客户端JVM都已完成,下面开始使用证书到Web服务器中,本教程使用tomcat。
如果你想删除,使用命令如下:
keytool -delete -alias wsria -keystore "C:\Program Files\Java\jdk1.7.0_71\jre\lib\security\cacerts" -storepass changeit
keytool -delete -alias wsria -keystore "C:\Program Files\Java\jre7\lib\security\cacerts" -storepass changeit
五、应用证书到Web服务器-Tomcat
启用Web服务器(Tomcat)的SSL,也就是HTTPS加密协议,准备好一个干净的tomcat,本教程使用的apache-tomcat-6.0.29 打开tomcat目录的conf/server.xml文件,开启83和87行的注释代码,并设置keystoreFile、keystorePass修改结果如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/keys/wsriakey"
keystorePass="wsria.com"
/>
参数说明:
keystoreFile:在第一步创建的key存放位置
keystorePass:创建证书时的密码
好了,到此Tomcat的SSL启用完成,现在你可以启动tomcat试一下了,
如果启动报错:
java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR
需要修改conf/server.xml注释掉下面一段,关闭APR
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
重启正常。网上还有另一种解决方案,暂时未实验,就是用openssl来导入证书。
现在如果访问https://sso.wsria.com:8443/的话,ie会提示你“此网站的安全证书有问题”,chrome提示“您的连接不是私密连接”。
这时,需要安装证书,直接双击d:/keys/wsria.crt文件,把证书安装在“受信任的根证书颁发机构”即可。然后重新打开网址就会看到变成绿色小锁了。如果不行的话,就重启浏览器。
注意:在创建证书时,证书的姓名写的是域名,即证书的颁发者是域名,当前访问地址也是域名。所以才证书才被信任。如果使用https://127.0.0.1:8443/还是会提示证书不安全。
文章
安全 · Java · 应用服务中间件 · 网络安全 · 数据安全/隐私保护 · Web App开发 · Windows
2015-11-03
tomcat 基于apr配置https
首先 安装 openssl :yum install openssl
第一步:生成证书
1)创建保存证书的目录:mkdir -p /usr/local/ssl
2) 生成证书:
首先,进入你想创建证书和私钥的目录,例如:
# cd /usr/local/ssl
创建服务器私钥,命令会让你输入一个口令:
# openssl genrsa -des3 -out server.key 1024
创建签名请求的证书(CSR):
# openssl req -new -key server.key -out server.csr
在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
# cp server.key server.key.org
最后标记证书使用上述私钥和CSR:
# openssl rsa -in server.key.org -out server.key
# openssl rsa -in server.key -out server.pem
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
第二步:系统级别的apr安装和设置,因为在linux系统上tomcat的apr在编译时是依赖它的
Linux下Apache和Apr整合,提高Apache性能
<!---->
1. 安装 APR
1)下载源码包 apr-1.2.8.tar.gz
下载地址:http://apr.apache.org
2)安装步骤
./configure --prefix=/usr/local/apache2/apr
make
make install
3)注意:prefix必须一次写正确,否则无法卸载重新指定目录 2. 安装APR-UTIL apr-util-1.2.8.tar.gz
1)下载源码包
下载地址: http://apr.apache.org
2)安装步骤
./configure --prefix=/usr/local/apache2/apr --with-apr=/usr/local/apache2/apr
make
make install
3. 安装apr-iconv-1.2.1.tar.gz 1)下载源码包 下载地址: http://apr.apache.org 2)安装步骤 ./configure --prefix=/usr/local/apache2/apr --with-apr=/usr/local/apache2/apr make make install
3)注意:prefix必须一次写正确,否则无法卸载重新指定目录
第三步 安装Tomcat-Native连接APR,提高静态资源的访问性能
1) 找到tomcat的bin目录下的tomcat-native.tar.gz
注意最好用tomcat自带的,因为下载的可能和tomcat版本不匹配,本人一开始就是下载的,结果make的时候一直报STACK变量找不到。 (当然如果
tomcat下真的没有,也可以自己下载,本人tomcat 8,使用omcat-native-1.1.33-src。
下载软件包 tomcat-native-1.1.10-src.tar.gz
下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/native/
)2)安装步骤 a. tartomcat-native.tar.gz b. cd /tomcat-native-1.1.33-src/jni/native c. ./configure --prefix=/usr/local/apache2/apr --with-apr=/usr/local/apache2/apr --with-java-home=/usr/java/jdk1.5.0_12 d. make e. make install f. 修改 bin/catalina.sh 添加 CATALINA_OPTS=' -Djava.library.path=/usr/local/apache2/apr/lib'
3)配置 server.xml 的https (其他地方不需要改)
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol"
port="8443" maxThreads="2000"
scheme="https" secure="true" SSLEnabled="true"
SSLCertificateFile="/usr/local/ssl/server.crt"
SSLCertificateKeyFile="/usr/local/ssl/server.pem"
SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/>
文章
应用服务中间件 · 网络安全 · Apache · Linux · Java · nginx
2016-05-14
搭建Jasig CAS中央认证服务实现单点登录——搭建Tomcat并实现SSL安全连接
预期的工作任务: 实现CAS(CAS采用Jasig CAS)单点登录搭建,开发api以实现java、php、.net等单点登录接口;实现数据库、LDAP身份认证对接。
(一)平台(Linux和Windows都能实现):
1.Windows Server 2008 R2(Windows 2000以上即可),用于承载Tomcat和其他开发环境,如数据库等(设置为服务器的IP是172.16.201.207);
2.Linux(安装有Openssl,一般都安装),用于后期配置证书,如导出pem证书格式(设置为root@172.16.202.106,以后不再注释);
(二)先决条件:
使用的是当前官方发布的最新稳定版本
1.需要JDK(官方推荐,实际上搭建过程中没有用到)
http://download.oracle.com/otn-pub/java/jdk/7u17-b02/jdk-7u17-windows-x64.exe
2.需要JRE(bin目录下有keytool工具,用于实现颁发证书)
http://download.oracle.com/otn-pub/java/jdk/7u17-b02/jre-7u17-windows-x64.exe
下载JDK和JRE需要注册Oracle账户
3.需要Tomcat
http://apache.dataguru.cn/tomcat/tomcat-7/v7.0.39/bin/apache-tomcat-7.0.39-windows-x64.zip
4.需要CAS安装包,cas-server-3.4.10-release.zip这个包不是很好下载,可能是防火墙的原因。但是找到下载地址用下载工具能下载的到。
http://downloads.jasig.org/cas/cas-server-3.4.10-release.zip
5.部署指南(可选)
http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.39/bin/apache-tomcat-7.0.39-deployer.zip
(三)启动Tomcat前需要设置环境变量(参考但不按照Tomcat包中的指导文件(./RUNNING.txt)进行配置)
###按照指导文件进行的操作
>set "CATALINA_HOME=C:\inetpub\apache-tomcat-7.0.39"
###不要执行下面一行,Tomcat包中的指导文件(./RUNNING.txt)有错误。
# set "CATALINA_BASE=C:\inetpub\apache-tomcat-7.0.39\conf"
>set "JRE_HOME=C:\Program Files\Java\jre7"
>set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17"
###修正以后的操作
>cd C:\inetpub\apache-tomcat-7.0.39\bin
>set "CATALINA_HOME=C:\inetpub\apache-tomcat-7.0.39"
>set "JRE_HOME=C:\Program Files\Java\jre7"
>set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17"
>catalina.bat run
现在Tomcat就可以运行了
(四)配置Tomcat使之能使用SSL实现加密的安全的连接
>cd C:\Program Files\Java\jre7\bin\
###密码是YourPassword
>keytool -genkey -alias cask -keyalg RSA -keystore c:\cas_key
###密码是YourPassword
>keytool -export -file c:\casrv.crt -alias cask -keystore c:\cas_key
###密码是changeit,此密码是Tomcat包中cacerts文件需要的默认密码
>keytool -import -keystore "C:\Program Files\Java\jre7\lib\security\cacerts" -file c:\casrv.crt -alias cask
根据命令行中给出的提示修正问题
###Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR
###修改85行,参考注释,添加如下内容
<Connector port="8443" protocol="HTTP/1.1"
SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="c:/cas_key" keystorePass="YourPassword"
SSLCertificateFile="c:/casrv.crt" SSLCertificateKeyFile="C:/cas_key.pem"
/>
### 为server.xml文件配置证书
### “>”表示在Windows运行,“#”表示在Linux下运行
>keytool -importkeystore -srckeystore c:\cas_key -destkeystore c:\cas_key.p12 -deststoretype PKCS12
>pscp c:/cas_key.p12 root@172.16.202.106:/tmp
### Tomcat的APR 模块需要用到.pem文件
#openssl pkcs12 -in cas_key.p12 -out cas_key.pem -nodes
>pscp root@172.16.202.106:/tmp/cas_key.pem c:/cas_key.pem
### 再次重新启动Tomcat,完成Tomcat的HTTPS配置
将cas-server-3.4.10-release.zip解压后得到的cas-server-3.4.10\modules\cas-server-webapp-3.4.10.war文件复制到C:\inetpub\apache-tomcat-7.0.39\webapps\cas.war
和更改Apache一样,每次更改目录和配置文件都需要重新启动Tomcat。
在浏览器中输入https://localhost:8443/cas即可访问CAS主页。
相关图片见附件1和附件2,
其他指导手册(CAS单点登录实例详细步骤.pdf)下载,见附件3.
后期会继续提供的CAS的相关开发文章。
附件:http://down.51cto.com/data/2362526
本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1167444,如需转载请自行联系原作者
文章
安全 · Java · Linux · 应用服务中间件 · Windows · 数据安全/隐私保护 · 网络安全 · Apache · 数据库 · 关系型数据库
2017-11-08
搭建Jasig CAS中央认证服务实现单点登录——搭建Tomcat并实现SSL安全连接
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/1167444
预期的工作任务: 实现CAS(CAS采用Jasig CAS)单点登录搭建,开发api以实现java、php、.net等单点登录接口;实现数据库、LDAP身份认证对接。
(一)平台(Linux和Windows都能实现):
1.Windows Server 2008 R2(Windows 2000以上即可),用于承载Tomcat和其他开发环境,如数据库等(设置为服务器的IP是172.16.201.207);
2.Linux(安装有Openssl,一般都安装),用于后期配置证书,如导出pem证书格式(设置为root@172.16.202.106,以后不再注释);
(二)先决条件:
使用的是当前官方发布的最新稳定版本
1.需要JDK(官方推荐,实际上搭建过程中没有用到)
http://download.oracle.com/otn-pub/java/jdk/7u17-b02/jdk-7u17-windows-x64.exe
2.需要JRE(bin目录下有keytool工具,用于实现颁发证书)
http://download.oracle.com/otn-pub/java/jdk/7u17-b02/jre-7u17-windows-x64.exe
下载JDK和JRE需要注册Oracle账户
3.需要Tomcat
http://apache.dataguru.cn/tomcat/tomcat-7/v7.0.39/bin/apache-tomcat-7.0.39-windows-x64.zip
4.需要CAS安装包,cas-server-3.4.10-release.zip这个包不是很好下载,可能是防火墙的原因。但是找到下载地址用下载工具能下载的到。
http://downloads.jasig.org/cas/cas-server-3.4.10-release.zip
5.部署指南(可选)
http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.39/bin/apache-tomcat-7.0.39-deployer.zip
(三)启动Tomcat前需要设置环境变量(参考但不按照Tomcat包中的指导文件(./RUNNING.txt)进行配置)
###按照指导文件进行的操作
>set "CATALINA_HOME=C:\inetpub\apache-tomcat-7.0.39"
###不要执行下面一行,Tomcat包中的指导文件(./RUNNING.txt)有错误。
# set "CATALINA_BASE=C:\inetpub\apache-tomcat-7.0.39\conf"
>set "JRE_HOME=C:\Program Files\Java\jre7"
>set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17"
###修正以后的操作
>cd C:\inetpub\apache-tomcat-7.0.39\bin
>set "CATALINA_HOME=C:\inetpub\apache-tomcat-7.0.39"
>set "JRE_HOME=C:\Program Files\Java\jre7"
>set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17"
>catalina.bat run
现在Tomcat就可以运行了
(四)配置Tomcat使之能使用SSL实现加密的安全的连接
>cd C:\Program Files\Java\jre7\bin\
###密码是YourPassword
>keytool -genkey -alias cask -keyalg RSA -keystore c:\cas_key
###密码是YourPassword
>keytool -export -file c:\casrv.crt -alias cask -keystore c:\cas_key
###密码是changeit,此密码是Tomcat包中cacerts文件需要的默认密码
>keytool -import -keystore "C:\Program Files\Java\jre7\lib\security\cacerts" -file c:\casrv.crt -alias cask
根据命令行中给出的提示修正问题
###Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR
###修改85行,参考注释,添加如下内容
<Connector port="8443" protocol="HTTP/1.1"
SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="c:/cas_key" keystorePass="YourPassword"
SSLCertificateFile="c:/casrv.crt" SSLCertificateKeyFile="C:/cas_key.pem"
/>
### 为server.xml文件配置证书
### “>”表示在Windows运行,“#”表示在Linux下运行
>keytool -importkeystore -srckeystore c:\cas_key -destkeystore c:\cas_key.p12 -deststoretype PKCS12
>pscp c:/cas_key.p12 root@172.16.202.106:/tmp
### Tomcat的APR 模块需要用到.pem文件
#openssl pkcs12 -in cas_key.p12 -out cas_key.pem -nodes
>pscp root@172.16.202.106:/tmp/cas_key.pem c:/cas_key.pem
### 再次重新启动Tomcat,完成Tomcat的HTTPS配置
将cas-server-3.4.10-release.zip解压后得到的cas-server-3.4.10\modules\cas-server-webapp-3.4.10.war文件复制到C:\inetpub\apache-tomcat-7.0.39\webapps\cas.war
和更改Apache一样,每次更改目录和配置文件都需要重新启动Tomcat。
在浏览器中输入https://localhost:8443/cas即可访问CAS主页。
相关图片见附件1和附件2,
其他指导手册(CAS单点登录实例详细步骤.pdf)下载,见附件3.
后期会继续提供的CAS的相关开发文章。
本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1167444
文章
安全 · Java · 应用服务中间件 · 网络安全 · 数据安全/隐私保护 · Windows · Apache · Linux · 数据库 · 关系型数据库
2016-05-24
大佬们。请问 tomcat配置怎么配置同一个端口多个ssl域名证书访问?
大神们,请教个问题! tomcat配置怎么配置同一个端口443多个ssl域名证书访问?目前两个域名解析为同一个IP地址,想要两个域名都能使用https访问, 目前的访问提示 “此服务器无法证明它是aa.xx.com;其安全证书bb.xx.com。出现此问题的原因可能是配置有误或您的连接被拦截了" 1. 要想都用https访问,是不是需要配置不同端口,而不是都用443端口? (目前配单个证书可以使用https访问,多个就出现上面的错误)
配置代码如下:
问答
域名解析 · 安全 · 应用服务中间件 · 网络安全
2020-09-15
Confluence 6 通过 SSL 或 HTTPS 运行 - 备注和问题解决
备注
在创建证书时候的背景信息: 'keytool -genkeypair' 命令将会创建秘钥对,包括公钥和关联的私钥,然后存储到 keystore 中。这个命令打包公钥为 X.509 v3 自签名证书,同时存储为证书链中的单一元素。这个证书链和私钥同时存储为一个新的 keystore 实例。是通过你在命令行中指定的别名进行识别的。Java SE documentation 能帮你更好的使用这个工具。
自定义 SSL 端口:如果你修改了你的 SSL 连接器运行的默认端口(8443),你必须需要更新标注 HTTPS 连接的 redirectPort 属性来映射到新的 SSL 端口。Tomcat 需要这些信息才能知道针对访问 HTTPS 应该重定向到那个端口。
同一主机的多实例:当你在同一主机中运行了多个实例,对地址(address )的确定非常重要,这个属性定义在 <CONFLUENCE_INSTALLATION>/conf/server.xml 文件中,默认的连接器将会列出所有可用的网络接口,因此指定地址将会阻止在同一主机中运行相同端口中的连接器的冲突。请参考 Tomcat 连接器的文档来获得有关地址属性的更多信息: https://tomcat.apache.org/tomcat-8.0-doc/config/http.html
<Connector port="8443" address="your.confluence.url.com" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" SSLEnabled="true"
URIEncoding="UTF-8" keystorePass="<MY_CERTIFICATE_PASSWORD>"
keystoreFile="<MY_CERTIFICATE_LOCATION>"/>
HTTPS 必须在你全站点配置:HTTPS 不能仅加密一个独立的页面或者空间。
在你对 Confluence 进行升级之前:对你修改过的 server.xml 和 web.xml 文件进行记录。每一升级完成后,你都需要对你修改过的配置文件进行重新配置。最好还是手动添加,而不是将整个文件复制粘贴。
问题解决
请参考 Confluence 知识库中有关的文章 troubleshooting SSL。
有关 Internet Explorer 不能下载附件的问题,将全站点应用 SSL 将会可能导致 IE 不能正确的下载附件。要修复这个问题,请编辑 <CONFLUENCE_INSTALLATION>/conf/server.xml 然后添加下面的行到 <Context ... />元素:
<Valve className="org.apache.catalina.authenticator.NonLoginAuthenticator"
disableProxyCaching="true" securePagesWithPragma="false" />
https://www.cwiki.us/display/CONF6ZH/Running+Confluence+Over+SSL+or+HTTPS
文章
存储 · 网络安全 · 应用服务中间件 · Java · 数据安全/隐私保护
2018-08-09
基于Docker的应用负载均衡与服务发现
基于Docker的应用负载均衡与服务发现
概述
现在微服务架构越来越流行,阿里云容器服务对于微服务架构提供了很好的支撑,平台提供了便利的服务注册与发现机制,内置的服务负载均衡与路由功能,以及灵活的模板编排、全生命周期管理。
对于Web应用,下图是阿里云容器服务对弹性高可用Web应用负载均衡及路由支持的一种形式:
阿里云容器路由服务
假如你有一个Web应用需要运行多个实例,并对外提供服务。可以配置docker compose模板如下(以Java应用的Tomcat+Mysql为例), 这里通过Docker的link方式支持服务的依赖,部署后mysql的IP地址,端口,环境变量等信息会自动配置到Tomcat容器的环境变量中。
tomcat-default:
environment:
- CATALINA_HOME=/usr/local/tomcat
- 'TOMCAT_TGZ_URL=https://www.apache.org/dist/tomcat/tomcat-8/v8.0.30/bin/apache-tomcat-8.0.30.tar.gz'
expose:
- 8080/tcp
image: 'tomcat:latest'
labels:
aliyun.routing.port_8080: 'http://tomcat-sample'
aliyun.scale: '3'
restart: always
links:
- 'db:mysql'
db:
image: registry.aliyuncs.com/acs-sample/mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
restart: always
labels:
aliyun.logs: /var/log/mysql
aliyun.scale: '3' 表示部署3个tomcat容器
aliyun.routing.port_8080: 'http://tomcat-sample' 配置路由服务(路由到3个容器的8080端口),并配置阿里云容器服务提供的测试域名。
或者在阿里云容器服务中通过界面部署应用:
选择镜像
配置域名
服务详情
访问域名

自定义负载均衡
很多的Web应用有自己的负载均衡Server, Nginx就是一个很流行的负载均衡及反向代理Server. 很多的Java应用也是采用Nginx+Tomcat架构,以提供负载均衡,静态资源代理,流控,ABTest等等服务支持。对于这样一个架构在Docker上我们应该怎样实现呢?下面我们看看几种不同的实现方式:
独立link
Nginx link到分立的多个Tomcat服务。Docker compose模板如下:
nginx:
image: 'nginx:latest'
labels:
aliyun.routing.port_80: 'http://ngtomcat'
aliyun.scale: '2'
ports:
- '80'
links:
- 'tomcat1:tomcat1'
- 'tomcat2:tomcat2'
- 'tomcat3:tomcat3'
restart: always
extra_hosts:
- "tomcat1.if:162.242.195.82"
tomcat1:
environment:
- LANG=C.UTF-8
- CATALINA_HOME=/usr/local/tomcat
- TOMCAT_MAJOR=8
image: 'tomcat:latest'
labels:
aliyun.routing.port_8080: 'http://tomcat1'
ports:
- '8080'
restart: always
tomcat2:
environment:
- LANG=C.UTF-8
- CATALINA_HOME=/usr/local/tomcat
- TOMCAT_MAJOR=8
image: 'tomcat:latest'
labels:
aliyun.routing.port_8080: 'http://tomcat1'
ports:
- '8080'
restart: always
tomcat3:
environment:
- LANG=C.UTF-8
- CATALINA_HOME=/usr/local/tomcat
- TOMCAT_MAJOR=8
image: 'tomcat:latest'
labels:
aliyun.routing.port_8080: 'http://tomcat1'
ports:
- '8080'
restart: always
这里前面是2个Nginx,后面接入3个Tomcat.Ngnix的upstream配置大致如下:
upstream tomcat {
server tomcat1:8080;
server tomcat2:8080;
server tomcat3:8080;
}
server {
listen 80;
server_name localhost;
index index.html index.htm index.php;
access_log /var/log/nginx/access.log;
location / {
proxy_pass http://tomcat;
}
}
Nginx的配置也可以在模板中通过command自动配置:command: sh -c "echo 'xxxx' >/etc/nginx/conf.d/default.conf"
这种方式是直接利用docker提供的link机制,link后docker会自动将link容器的ip配置到nginx容器中。阿里云容器服务针对ECS的经典网络及VPC都提供了夸主机通讯的能力,tomcat容器部署到多节点上,通讯也不会有问题。这种方式是路由到容器的IP+Port,优点是配置简单,跟以前的应用部署比较类似,但不便于弹性扩展,增加tomcat就需要调整配置。
或者也可以只link到一个tomcat服务(多个容器),并配置路由到容器(容器 host为tomcat_n)。
路由到节点
阿里云容器服务在集群的每个ECS节点上都提供了一个路由服务,可以利用这个路由服务提供更弹性的负载均衡服务。Compose模板如下:
nginx:
image: 'nginx:latest'
labels:
aliyun.routing.port_80: 'http://ngtomcat'
aliyun.scale: '2'
ports:
- '80'
links:
- 'tomcat1:tomcat1'
- 'tomcat2:tomcat2'
restart: always
extra_hosts:
- "tomcat1.ir:123.56.80.151"
- "tomcat2.ir:182.92.204.43"
tomcat1:
environment:
- LANG=C.UTF-8
- CATALINA_HOME=/usr/local/tomcat
- TOMCAT_MAJOR=8
image: 'tomcat:latest'
labels:
aliyun.scale: '2'
aliyun.routing.port_8080: 'http://tomcat.ir'
ports:
- '8080'
restart: always
tomcat2:
environment:
- LANG=C.UTF-8
- CATALINA_HOME=/usr/local/tomcat
- TOMCAT_MAJOR=8
image: 'tomcat:latest'
labels:
aliyun.scale: '2'
aliyun.routing.port_8080: 'http://tomcat.ir'
ports:
- '8080'
restart: always
这里配置了2个Nginx,Nginx连接了2个Tomcat服务,每个Tomcat服务运行2个实例。
nginx upstream配置大致如下:
upstream tomcat.ir {
server tomcat.ir.1;
server tomcat.ir.2;
}
server {
listen 80;
server_name tomcat.ir;
index index.html index.htm index.php;
access_log /var/log/nginx/access.log;
location / {
proxy_pass http://tomcat.ir;
}
}
这种方式利用阿里云容器提供的路由服务,能够自动服务发现与路由。当tomcat弹性调整容器数量的时候,并不需要调整模板或者Nginx的配置,会更加方便些。
利用API进行服务发现
阿里云容器也提供了服务发现的API,我们可以利用服务发现API定制自己的负载均衡。
获取某个服务的状态API如下(支持Stream):
API
/services/{serviceId}
样例
请求命令:curl -k --cert agent.pem --key agent-key.pem https://DiscoveryServer:2379/services/ceshi-2_gitlab结果:{
"Service": {
"name": "gitlab",
"project": "ceshi-2",
"definition": {
"image": "registry.aliyuncs.com/acs-sample/sameersbn-gitlab:7.14.1",
"labels": {
...
"aliyun.routing.port_80": "gitlab-test"
},
"links": ["redis:redisio", "postgresql:postgresql"],
"ports": ["80", "10022:22"],
"volumes": ["/srv/docker/gitlab/gitlab:/home/git/data"]
},
"extensions": {
"scale": 1,
"routing": [{
"virtual_host": "gitlab-test.xxx.cn-hangzhou.alicontainer.com",
"protocol": "http",
"port": 80
}]
},
...
},
"Containers": {
"13b3ee3e7ca247537756ad4db117d76f52d9a40efd84d561f1b865200597c97d": {
"name": "/ceshi-2_gitlab_1",
"node": "120.55.181.78",
"ip": "172.64.0.8",
"running": true,
"status": "running",
"health": "success"
}
}
}
这里是一个用Python脚本查询更新Nginx的样例:
def serviceSync():
# Get setting
projectName = os.getenv('COMPOSE_PROJECT_NAME')
serviceServer = os.getenv('ETCD_NODES')
...
# Get service data for contianers
serviceData = getServiceData(serviceServe, serviceName )
upStreamIPs = getUpstreamIps( serviceData )
# Generate config from template
upstreamServers = ''
for ip in upStreamIPs:
upstreamServers += "server %s:%s;\n" % (ip, port)
config = getTemplate().substitute(upstreamServers=upstreamServers)
updateConfig( config )
def main():
options, arguments = getOpts()
while True:
serviceSync()
time.sleep(60)
用这个脚本构建一个自动更新配置的Nginx的新镜像:
FROM nginx:1.9.8
MAINTAINER Chang Hai Yan <danielyanch@hotmail.com>
ADD serviceSync.py /usr/local/bin/serviceSync.py
ADD supervisord.conf /etc/supervisord.conf
RUN apt-get update && \
apt-get install --force-yes -y curl python supervisor && \
chmod +x /usr/local/bin/serviceSync.py
CMD supervisord -n
Compose部署模板如下,注意访问API需要证书,需要在Label中添加 aliyun.addon ,有这个Label,部署的时候,集群管理会自动将服务发现Server的地址及证书配置到运行的容器中。
nginx:
image: 'registry.aliyuncs.com/acs-sample/nginx-service-discovery'
labels:
aliyun.routing.port_80: 'http://ngservice'
aliyun.scale: '2'
aliyun.addon: "nginx"
ports:
- '80'
links:
- 'tomcat:tomcat'
restart: always
tomcat:
environment:
- LANG=C.UTF-8
- CATALINA_HOME=/usr/local/tomcat
- TOMCAT_MAJOR=8
image: 'tomcat:latest'
labels:
aliyun.scale: '3'
aliyun.routing.port_8080: 'http://tomcat'
ports:
- '8080'
restart: always
阿里云容器服务也支持通过NAT+SLB的方式来进行负载均衡及更简单的事件机制进行服务的生命周期管理,我们后面再介绍。
文章
负载均衡 · 应用服务中间件 · nginx · Docker · 容器
2016-02-25