linux下tomcat开通443端口

linux下 yum 方式安装 Tomcat 后配置https,定义端口为 443 后无法正常启动服务


问题现象: 定义端口为默认的 8443 可以正常启动服务和监听端口:

  1. root@centos7 ~ # vim /etc/tomcat/server.xml
  2. <Connector port="8443"
  3. protocol="HTTP/1.1"
  4. maxThreads="150"
  5. SSLEnabled="true"
  6. scheme="https"
  7. secure="true"
  8. clientAuth="false"
  9. keystoreFile="/etc/tomcat/test.seekerhcl.cn.jks"
  10. keystorePass="123456"
  11. ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  12. TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  13. TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
  14. TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
  15. TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
  16. TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
  17. sslProtocol="TLS" />
  18. root@centos7 ~ # rpm -q tomcat
  19. tomcat-7.0.76-3.el7_4.noarch
  20. root@centos7 ~ # systemctl start tomcat.service
  21. root@centos7 ~ # netstat -anpt | grep java
  22. tcp 0 0 0.0.0.0:8443 0.0.0.0:* LISTEN 6168/java
  23. tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN 6168/java
  24. tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 6168/java
  25. tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 6168/java
  26. root@centos7 ~ #

定义 https 端口443 不可以正常监听对应端口:

  1. root@centos7 ~ # vim /etc/tomcat/server.xml
  2. <Connector port="443"
  3. protocol="HTTP/1.1"
  4. maxThreads="150"
  5. SSLEnabled="true"
  6. scheme="https"
  7. secure="true"
  8. clientAuth="false"
  9. keystoreFile="/etc/tomcat/test.seekerhcl.cn.jks"
  10. keystorePass="123456"
  11. ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  12. TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  13. TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
  14. TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
  15. TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
  16. TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
  17. sslProtocol="TLS" />
  18. root@centos7 ~ # systemctl restart tomcat.service
  19. root@centos7 ~ # netstat -anpt | grep java
  20. tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN 49091/java
  21. tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 49091/java
  22. tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 49091/java

问题分析:

查看日志文件发现以下错误,原来是权限问题,紧接着我们通过 ps 查看进程信息会发现程序用户是tomcat,因为 linux 下非 root 用户不能打开1024以下的端口,所以问题就比较清楚了

Caused by: java.net.BindException: Permission denied (Bind failed)  <null>:443

  1. root@centos7 ~ # cat /var/log/tomcat/catalina.2018-04-07.log
  2. Apr 07, 2018 12:29:48 AM org.apache.catalina.core.StandardService initInternal
  3. SEVERE: Failed to initialize connector [Connector[HTTP/1.1-443]]
  4. org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-443]]
  5. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
  6. at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)
  7. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
  8. at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:840)
  9. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
  10. at org.apache.catalina.startup.Catalina.load(Catalina.java:642)
  11. at org.apache.catalina.startup.Catalina.load(Catalina.java:667)
  12. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  13. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  14. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  15. at java.lang.reflect.Method.invoke(Method.java:498)
  16. at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
  17. at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
  18. Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
  19. at org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
  20. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
  21. ... 12 more
  22. Caused by: java.net.BindException: Permission denied (Bind failed) <null>:443
  23. at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:413)
  24. at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:715)
  25. at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:452)
  26. at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
  27. at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
  28. ... 13 more
  29. Caused by: java.net.BindException: Permission denied (Bind failed)
  30. at java.net.PlainSocketImpl.socketBind(Native Method)
  31. at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
  32. at java.net.ServerSocket.bind(ServerSocket.java:375)
  33. at java.net.ServerSocket.<init>(ServerSocket.java:237)
  34. at java.net.ServerSocket.<init>(ServerSocket.java:181)
  35. at javax.net.ssl.SSLServerSocket.<init>(SSLServerSocket.java:136)
  36. at sun.security.ssl.SSLServerSocketImpl.<init>(SSLServerSocketImpl.java:113)
  37. at sun.security.ssl.SSLServerSocketFactoryImpl.createServerSocket(SSLServerSocketFactoryImpl.java:87)
  38. at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:256)
  39. at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:400)
  40. root@centos7 ~ # ps aux | grep java
  41. tomcat 3921 0.3 3.1 3585548 120932 ? Ssl 00:29 0:02 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
  42. root 5054 0.0 0.0 110376 896 pts/0 S+ 00:40 0:00 grep --color=auto java

解决方案: tomcat https 端口依旧监听在大于 1024 的端口上,使用 iptables 来做个转换,这样访问 https 时我们就不用手动在域名后面写端口号了 iptables -t nat -A PREROUTING -p tcp –dport 443 -j REDIRECT –to-port 8443

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android源码框架分析

十分钟了解Android触摸事件原理(InputManagerService)

从手指接触屏幕到MotionEvent被传送到Activity或者View,中间究竟经历了什么?Android中触摸事件到底是怎么来的呢?源头是哪呢?本文就直观...

47840
来自专栏向治洪

android优化之省电

Android程序中耗电最多的地方在以下几个方面 : 1、 大数据量的传输。 2、 不停的在网络间切换。 3、 解析大量的文本数据。 那么我们怎么样来改...

203100
来自专栏Kubernetes

kube-proxy工作原理

kube-proxy & service必要说明 说到kube-proxy,就不得不提到k8s中service,下面对它们两做简单说明: kube-proxy其...

1.8K120
来自专栏10km的专栏

caffe:cmake编译指定glog,gflag路径

当使用cmake编译caffe的情况下,在 cmake生成Makefile时会自动找到系统安装的glog,gflag,但是如是我们自己编译了一个glog,gfl...

42450
来自专栏黑泽君的专栏

关于tomcat启动时的警告 :Property maxActive is not used in DBCP2, use maxTotal instead. 和 Property maxWait i

我们现在用的tomcat大概都是8.5 或是9.0,这些版本的tomcat内置的DBCP2,和以前老版本如tomcat 7的连接池不一样,7.0等老版本用的是D...

92620
来自专栏向治洪

android PakageManagerService启动流程分析

PakageManagerService的启动流程图 ? 1.PakageManagerService概述 PakageManagerService是andro...

552100
来自专栏程序员互动联盟

【开发指南】如何为nexus 5编译固件

nexus 5是谷歌的亲儿子,而android的源码是开源的,那如果我有一个nexus 5手机,为何不自己为nexus 5编译软件呢? 开搞,本文假定已经有an...

435120
来自专栏帘卷西风的专栏

关于cocos2dx客户端程序的自动更新解决方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

23310
来自专栏嵌入式程序猿

那些年,我们追过的MCU复位

概述 在嵌入式系统中,复位(Reset)功能的应用非常广泛。复位是MCU工作开始的标志,MCU中所有的初始化工作都是在复位之后开始的。在实际应用中,我们也可以通...

40160
来自专栏西安-晁州

golang的xml、json解析

xml golang的xml处理主要应用Unmarshal、Marshal方法实现,解析一个xml到struct如下,首先是xml文件: <?xml versi...

44300

扫码关注云+社区

领取腾讯云代金券