Tomcat 在配置完 SSL 后,IE 浏览器访问时Socket error caused by remote host异常错误信息的解决办法

本文探讨了Tomcat 5.5配置SSL后,在IE浏览器中快速访问或刷新页面时出现的Socket错误问题。通过调整Tomcat配置及IE缓存设置解决了这一问题。

Tomcat 5.5 在配置完 SSL 后,使用 IE 浏览器访问时,如果页面访问或者刷新很快,就会在控制台出现如下错误信息,使用 Firefox 和chrome 进行测试,则都不会出现该错误:

2009-7-28 10:39:34 org.apache.tomcat.util.net.PoolTcpEndpoint processSocket
严重: Socket error caused by remote host /127.0.0.1
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:782)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1089)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1116)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1100)
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.handshake(JSSESocketFactory.java:119)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:520)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
2009-7-28 10:39:35 org.apache.tomcat.util.net.PoolTcpEndpoint processSocket
严重: Socket error caused by remote host /127.0.0.1
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:782)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1089)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1116)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1100)
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.handshake(JSSESocketFactory.java:119)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:520)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

 

 

Google了几个相关的问题和解决方案:


问题描述基本相同:
http://www.nabble.com/SSL-and-flash-in-tomcat-td17828970.html

 

这里大致讲解了问题的原因:
http://marc.info/?l=tomcat-user&m=121156687313957&w=2

 

如下:
This is a well-known IE "feature". This thread (one of many) includes a long /
discussion of the problem, along with potential workarounds. /
http://marc.info/?l=tomcat-user&m=111811136603781&w=2

Following the thread from that point on is quite illuminating; prior to the above /
message, it's mostly confusion.

 

 

这里描述了更详细的原因以及解决办法:

http://marc.info/?l=tomcat-user&m=111811136603781&w=2

 

如下:
If users are having this problem only when the server is serving content
from a protected context in Tomcat, then it is highly likely that you
have run into this.

http://issues.apache.org/bugzilla/show_bug.cgi?id=27122

It's something in IE that most people would call a bug, but MS has
chosen to call a feature. The problem occurs when Tomcat appends cache
control headers (i.e. "cache-control:no-cache" and "pragma:no-cache")
that indicate no caching is allowed by HTTP intermediaries. However, IE
interprets these headers to mean that temporary storage in the client is
also forbidden. So IE attempts to write the file to temporary storage as
it does for all file downloads, and cancels the operation when it
encounters the cache control headers. Then the app or file system
(depending on whether you're running or saving the file) tries to find
the file, doesn't find it, and cleverly reports that the site is
unreachable.

To fix it, you simply have to configure Tomcat to not set the cache
control headers when serving content from a protected context. Create a
valve as follows, and put it in the appropriate <context/> element. Make
sure to substitute the class for whatever type of authentication you're
using.

<Valve className="org.apache.catalina.authenticator.DigestAuthenticator"
disableProxyCaching="false" />

It's a silly problem. I ran in to it a while back, and it really
mystified me until I found the bug write-up. Tomcat is doing the right
thing, but MS has declared that IE is working "as designed" in this.
FWIW, the HTTP spec is clear that the no-cache behavior applies to HTTP
intermediaries, not user agents.

-Mark

sudip shrestha wrote:

 

 

按着上面说的,在 context XML节点添加了

<Valve className="org.apache.catalina.authenticator.DigestAuthenticator"
disableProxyCaching="false" />

 

之后,在我的机器上面的 IE 浏览器下进行快速刷新,还是会出现如上的问题。

 

于是,重新设置IE选项

步骤:

工具-> Internet选项 ->常规  选项卡 , 在 Internet 临时文件选框中选择按钮 -> 设置 , 弹出 设置 选项卡,将“每次访问此页时检查” 修改为 “自动”即可。

 

继续在IE中进行上述测试,问题不再出现。

 

其实,IE 默认的设置就是“自动”,只是因为开发人员为了开发方便,自己修改了设置为 “每次访问时检查”。

 

 

 

# # Copyright 1999-2025 Alibaba Group Holding Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # #--------------- Nacos Common Configurations ---------------# #*************** Nacos port Related Configurations ***************# ### Nacos Server Main port nacos.server.main.port=8848 #*************** Network Related Configurations ***************# ### If prefer hostname over ip for Nacos server addresses in cluster.conf: # nacos.inetutils.prefer-hostname-over-ip=false ### Specify local server's IP: # nacos.inetutils.ip-address= #*************** Datasource Related Configurations ***************# ### nacos.plugin.datasource.log.enabled=true #spring.sql.init.platform=mysql ### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/syl_dv_user?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user=root db.password=root #*************** Metrics Related Configurations ***************# ### Metrics for prometheus #management.endpoints.web.exposure.include=prometheus ### Metrics for elastic search management.metrics.export.elastic.enabled=false #management.metrics.export.elastic.host=http://localhost:9200 ### Metrics for influx management.metrics.export.influx.enabled=false #management.metrics.export.influx.db=springboot #management.metrics.export.influx.uri=http://localhost:8086 #management.metrics.export.influx.auto-create-db=true #management.metrics.export.influx.consistency=one #management.metrics.export.influx.compressed=true #*************** Console Related Configurations ***************# ### CORS (Cross-Origin Resource Sharing) configurations for console ### Whether to allow credentials (cookies, authorization headers, TLS client certificates) # nacos.console.cors.allow-credentials=true ### Allowed headers, comma separated. Empty means allow all headers (*) # nacos.console.cors.allowed-headers= ### Maximum age (in seconds) of the CORS preflight request cache # nacos.console.cors.max-age=18000 ### Allowed HTTP methods, comma separated. Empty means allow all methods (*) # nacos.console.cors.allowed-methods= ### Allowed origins, comma separated. Empty means allow all origin patterns (*) ### Example: nacos.console.cors.allowed-origins=http://localhost:8080,https://example.com # nacos.console.cors.allowed-origins= #*************** Core Related Configurations ***************# ### set the WorkerID manually # nacos.core.snowflake.worker-id= ### Member-MetaData # nacos.core.member.meta.site= # nacos.core.member.meta.adweight= # nacos.core.member.meta.weight= ### MemberLookup ### Addressing pattern category, If set, the priority is highest # nacos.core.member.lookup.type=[file,address-server] ## Set the cluster list with a configuration file or command-line argument # nacos.member.list=192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 ## for AddressServerMemberLookup # Maximum number of retries to query the address server upon initialization # nacos.core.address-server.retry=5 ## Server domain name address of [address-server] mode # address.server.domain=jmenv.tbsite.net ## Server port of [address-server] mode # address.server.port=8080 ## Request address of [address-server] mode # address.server.url=/nacos/serverlist #*************** JRaft Related Configurations ***************# ### Sets the Raft cluster election timeout, default value is 5 second # nacos.core.protocol.raft.data.election_timeout_ms=5000 ### Sets the amount of time the Raft snapshot will execute periodically, default is 30 minute # nacos.core.protocol.raft.data.snapshot_interval_secs=30 ### raft internal worker threads # nacos.core.protocol.raft.data.core_thread_num=8 ### Number of threads required for raft business request processing # nacos.core.protocol.raft.data.cli_service_thread_num=4 ### raft linear read strategy. Safe linear reads are used by default, that is, the Leader tenure is confirmed by heartbeat # nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe ### rpc request timeout, default 5 seconds # nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000 ### enable to support prometheus service discovery #nacos.prometheus.metrics.enabled=true #*************** Distro Related Configurations ***************# ### Distro data sync delay time, when sync task delayed, task will be merged for same data key. Default 1 second. # nacos.core.protocol.distro.data.sync.delayMs=1000 ### Distro data sync timeout for one sync data, default 3 seconds. # nacos.core.protocol.distro.data.sync.timeoutMs=3000 ### Distro data sync retry delay time when sync data failed or timeout, same behavior with delayMs, default 3 seconds. # nacos.core.protocol.distro.data.sync.retryDelayMs=3000 ### Distro data verify interval time, verify synced data whether expired for a interval. Default 5 seconds. # nacos.core.protocol.distro.data.verify.intervalMs=5000 ### Distro data verify timeout for one verify, default 3 seconds. # nacos.core.protocol.distro.data.verify.timeoutMs=3000 ### Distro data load retry delay when load snapshot data failed, default 30 seconds. # nacos.core.protocol.distro.data.load.retryDelayMs=30000 ### enable to support prometheus service discovery #nacos.prometheus.metrics.enabled=true #*************** Grpc Configurations ***************# ### Sets the maximum message size allowed to be received on the server. #nacos.remote.server.grpc.sdk.max-inbound-message-size=10485760 ### Sets the time(milliseconds) without read activity before sending a keepalive ping. The typical default is two hours. #nacos.remote.server.grpc.sdk.keep-alive-time=7200000 ### Sets a time(milliseconds) waiting for read activity after sending a keepalive ping. Defaults to 20 seconds. #nacos.remote.server.grpc.sdk.keep-alive-timeout=20000 ### Sets a time(milliseconds) that specify the most aggressive keep-alive time clients are permitted to configure. The typical default is 5 minutes #nacos.remote.server.grpc.sdk.permit-keep-alive-time=300000 ### cluster grpc(inside the nacos server) configuration #nacos.remote.server.grpc.cluster.max-inbound-message-size=10485760 ### Sets the time(milliseconds) without read activity before sending a keepalive ping. The typical default is two hours. #nacos.remote.server.grpc.cluster.keep-alive-time=7200000 ### Sets a time(milliseconds) waiting for read activity after sending a keepalive ping. Defaults to 20 seconds. #nacos.remote.server.grpc.cluster.keep-alive-timeout=20000 ### Sets a time(milliseconds) that specify the most aggressive keep-alive time clients are permitted to configure. The typical default is 5 minutes #nacos.remote.server.grpc.cluster.permit-keep-alive-time=300000 #*************** Config Module Related Configurations ***************# ### the maximum retry times for push nacos.config.push.maxRetryTime=50 #*************** Naming Module Related Configurations ***************# ### Data dispatch task execution period in milliseconds: ### If enable data warmup. If set to false, the server would accept request without local data preparation: # nacos.naming.data.warmup=true ### If enable the instance auto expiration, kind like of health check of instance: # nacos.naming.expireInstance=true nacos.naming.empty-service.auto-clean=true nacos.naming.empty-service.clean.initial-delay-ms=50000 nacos.naming.empty-service.clean.period-time-ms=30000 #*************** AI Module Related Configurations ***************# ### Whether nacos ai module is enabled, default true. the ai module need both config module and naming module enabled. # nacos.extension.ai.enabled=true ### Whether nacos mcp registry is enabled, default is false. ### When enabled=true, Nacos will start a `mcp registry` server with new port with `nacos.ai.mcp.registry.port` #nacos.ai.mcp.registry.enabled=false ### Nacos mcp registry port, default 9080: nacos.ai.mcp.registry.port=9080 #--------------- Nacos Web Server Configurations ---------------# #*************** Nacos Web Server Related Configurations ***************# ### Nacos Server Web context path: nacos.server.contextPath=/nacos #*************** Access Log Related Configurations ***************# ### If turn on the access log: server.tomcat.accesslog.enabled=true ### accesslog automatic cleaning time server.tomcat.accesslog.max-days=30 ### The access log pattern: server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i ### The directory of access log: server.tomcat.basedir=file:. #*************** API Related Configurations ***************# ### Include message field server.error.include-message=ALWAYS ### Enabled for open API compatibility # nacos.core.api.compatibility.client.enabled=true ### Enabled for admin API compatibility # nacos.core.api.compatibility.admin.enabled=false ### Enabled for console API compatibility # nacos.core.api.compatibility.console.enabled=false #--------------- Nacos Console Configurations ---------------# #*************** Nacos Console Related Configurations ***************# ### Nacos Console Main port nacos.console.port=8080 ### Nacos Server Web context path: nacos.console.contextPath= ### Nacos Server context path, which link to nacos server `nacos.server.contextPath`, works when deployment type is `console` nacos.console.remote.server.context-path=/nacos #************** Console UI Configuration ***************# ### Turn on/off the nacos console ui. #nacos.console.ui.enabled=true #--------------- Nacos Plugin Configurations ---------------# #*************** CMDB Plugin Related Configurations ***************# ### The interval to dump external CMDB in seconds: # nacos.cmdb.dumpTaskInterval=3600 ### The interval of polling data change event in seconds: # nacos.cmdb.eventTaskInterval=10 ### The interval of loading labels in seconds: # nacos.cmdb.labelTaskInterval=300 ### If turn on data loading task: # nacos.cmdb.loadDataAtStart=false #*************** Auth Plugin Related Configurations ***************# ### The ignore urls of auth, will be deprecated in the future: nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/** ### The auth system to use, default 'nacos' and 'ldap' is supported, other type should be implemented by yourself: nacos.core.auth.system.type=nacos ### If turn on auth system: # Whether open nacos server API auth system #nacos.core.auth.enabled=false # Whether open nacos admin API auth system nacos.core.auth.admin.enabled=true # Whether open nacos console API auth system nacos.core.auth.console.enabled=true ### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay. nacos.core.auth.caching.enabled=true ### worked when nacos.core.auth.enabled=true ### The two properties is the white list for auth and used by identity the request from other server. nacos.core.auth.server.identity.key=nacos nacos.core.auth.server.identity.value=nacos ### worked when nacos.core.auth.system.type=nacos or nacos.core.auth.console.enabled=true ### The token expiration in seconds: nacos.core.auth.plugin.nacos.token.cache.enable=false nacos.core.auth.plugin.nacos.token.expire.seconds=18000 ### The default token (Base64 string): #nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg= nacos.core.auth.plugin.nacos.token.secret.key=yB7wE2fR5tH8jK3pL9oN6mQ1sX4vA7zC0uI= ### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username #nacos.core.auth.ldap.url=ldap://localhost:389 #nacos.core.auth.ldap.basedc=dc=example,dc=org #nacos.core.auth.ldap.userDn=cn=admin,${nacos.core.auth.ldap.basedc} #nacos.core.auth.ldap.password=admin #nacos.core.auth.ldap.userdn=cn={0},dc=example,dc=org #nacos.core.auth.ldap.filter.prefix=uid #nacos.core.auth.ldap.case.sensitive=true #nacos.core.auth.ldap.ignore.partial.result.exception=false #*************** Control Plugin Related Configurations ***************# # plugin type #nacos.plugin.control.manager.type=nacos # local control rule storage dir, default ${nacos.home}/data/connection and ${nacos.home}/data/tps #nacos.plugin.control.rule.local.basedir=${nacos.home} # external control rule storage type, if exist #nacos.plugin.control.rule.external.storage= #*************** Config Change Plugin Related Configurations ***************# # webhook #nacos.core.config.plugin.webhook.enabled=false # It is recommended to use EB https://help.aliyun.com/document_detail/413974.html #nacos.core.config.plugin.webhook.url=http://localhost:8080/webhook/send?token=*** # The content push max capacity ,byte #nacos.core.config.plugin.webhook.contentMaxCapacity=102400 # whitelist #nacos.core.config.plugin.whitelist.enabled=false # The import file suffixs #nacos.core.config.plugin.whitelist.suffixs=xml,text,properties,yaml,html # fileformatcheck,which validate the import file of type and content #nacos.core.config.plugin.fileformatcheck.enabled=false #*************** Istio Plugin Related Configurations ***************# ### If turn on the MCP server: nacos.istio.mcp.server.enabled=false #--------------- Nacos Experimental Features Configurations ---------------# #*************** K8s Related Configurations ***************# ### If turn on the K8s sync: nacos.k8s.sync.enabled=false ### If use the Java API from an application outside a kubernetes cluster #nacos.k8s.sync.outsideCluster=false #nacos.k8s.sync.kubeConfig=/.kube/config # 启用鉴权功能 nacos.core.auth.enabled=true # 配置用于生成 JWT 令牌的密钥 # 注意:此密钥在生产环境中应保持高度机密,并定期更换 nacos.core.auth.server.secret.key=xL9wG7bQm4sPf1hKj8nZvY2cT5uR3iAeO6D1qW0pE= 报错Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tokenManager' defined in class path resource [com/alibaba/nacos/plugin/auth/impl/configuration/core/NacosAuthPluginCoreConfig.class]: Failed to instantiate [com.alibaba.nacos.plugin.auth.impl.token.TokenManager]: Factory method 'tokenManager' threw exception with message: the length of secret key must great than or equal 32 bytes; And the secret key must be encoded by base64.Please see https://nacos.io/docs/latest/manual/admin/auth/
最新发布
12-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值