我按照以下链接中的说明在tomcat内的单个端口上创建自己的RMI注册表和jmx服务器.根据评论,我需要设置-Djava.rmi.server.hostname = localhost.一旦我这样做,我确实可以使用ssh端口转发通过jconsole连接到我的服务器.
http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx
但是,我发现它破坏了使用RMI的ehcache复制的非常糟糕的副作用.它无法抱怨它无法从远程对等localhost引导.我猜是因为对等体都将其rmi服务器主机名设置为localhost,设置为-Djava.rmi.server.hostname = localhost.
有没有人可以解决这个问题?
这个问题让我感到疯狂,所以也许有人可以帮我理解问题所在.我有一个tomcat web应用程序正面向HAProxy.HAProxy也在进行SSL卸载,并配置为使用粘性会话.我正在使用Tomcat的会话复制功能,这似乎工作正常.会话出现在两个appservers上.
出于某种原因,Tomcat为每个Web请求生成一个新的JSESSIONID,然后将旧会话的内容复制到新会话中.也就是说,我的会话内容仍在新会话中,但会生成新ID并将其发送回客户端.但它只对我的Web应用程序执行此操作.它不会对/ manager应用程序执行此操作.
我已经尝试了本书中的每一个技巧,比如在我的context.xml中设置它:
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" changeSessionIdOnAuthentication="false" />
Run Code Online (Sandbox Code Playgroud)
并在我的Context元素上设置这些属性:
<Context path="/myapp" reloadable="false" override="true" useNaming="false" allowLinking="true" useHttpOnly="false" sessionCookiePath="/" sessionCookiePathUsesTrailingSlash="false">
Run Code Online (Sandbox Code Playgroud)
而且,结果仍然是一样的.Tomcat为每个请求生成一个新的会话ID,并将旧会话的内容复制到新的id中.
我怀疑它与HAProxy有关,除了/ manager应用程序也在HAProxy后面,它没有表现出这种行为.
为什么Tomcat这样做,我该怎么做才能阻止它呢?
我现在一直在撞墙,试图弄清楚为什么我们的银行无法解密使用BouncyCastle PGP进行单程签名和加密的邮件.该银行正在使用McAfee E-Business Server 8.6进行解密.
数据使用银行的公钥加密,并使用我们的私钥进行签名.
使用我们自己的公钥进行加密,我成功地能够解密并验证使用以下代码生成的文件上的签名.Gnupg可以解密并验证文件就好了.
但是,银行无法解密该文件.我试过先关闭压缩,然后关闭ASCII装甲.这两个选项似乎都不起作用,无论我尝试什么选项,它们总是得到相同的错误消息:
event 1: initial
event 13: BeginLex
event 8: Analyze
File is encrypted. event 9: Recipients
Secret key is required to read it.
Key for user ID "XXXXXXXXX <XXXXXX@XXXX>"
event 6: Passphrase
event 23: Decryption
symmetric cipher used: CAST5
event 3: error -11391
event 2: final
Error decrypting file '/somepath/FILENAME'.
Corrupt data.
Bad packet
exitcode = 32
Run Code Online (Sandbox Code Playgroud)
这是我用来执行单通道符号和加密的代码:
public class PGPService {
private static final Logger log = Logger.getLogger(PGPService.class);
static {
Security.addProvider(new BouncyCastleProvider()); …Run Code Online (Sandbox Code Playgroud) 我正在用Java编写安全的文件共享应用程序.一般架构如下所示:
这是捕获.用户的私钥必须加密并存储在我们数据库的服务器上,以便可以从多个位置访问这些文件.在上传到服务器之前,私钥将在客户端上使用用户选择的密码进行加密.
我想使用AES 256位加密来做到这一点.而且我想在不依赖BouncyCastle库或任何第三方库的情况下完成整个过程.它需要使用标准的Java 5库,这就是我选择使用AES 256加密和RSA而不是像PGP这样的原因.
任何人都可以找到任何本质上不安全的方法,或者想一个更有效的方法来做到这一点?
编辑:
好的,我正在更新问题,因为我得到的所有答案都表明我没有将私钥传输到服务器.我需要服务器上的私钥的原因是因为用户需要能够从多个客户端和多个位置(即:他们的iphone,他们的ipad,他们的工作笔记本电脑,他们的家用电脑)访问他们的数据.他们不希望必须在设备之间管理和复制他们的密钥,这比将密钥存储在我们的服务器上更加不安全,因为他们最终会在那时通过电子邮件将它们发送给自己.
java ×3
encryption ×2
tomcat ×2
aes ×1
bouncycastle ×1
ehcache ×1
haproxy ×1
jmx ×1
jsessionid ×1
mcafee ×1
pgp ×1
private-key ×1
rmi ×1
rsa ×1
session ×1
ssh ×1