Tag: 安全

SSL握手过程

我开始考虑安全性并阅读有关SSL握手方案的内容。 在这篇文章中 ,回复者提到对称密钥是在浏览器上生成的,使用服务器的公钥加密并发送到服务器。 然而,在其他文章中,他们提到生成了一个预主密钥,并且代之以用于计算对称密钥。 我可以知道哪个是正确的解释,这个预主密钥是如何生成并用于生成对称密钥的?

如何定义Google App Engine使用的领域?

我的应用程序有安全约束: users all /secured GET POST HEAD PUT OPTIONS TRACE DELETE Have to be a USER USERS BASIC USERS 然而,在运行时,没有领域“USERS”: 2009-06-15 10:25:42.536 ::警告:请求/安全失败 – 没有领域 如何在谷歌应用引擎下定义领域? 通过使用jetty.xml? 它由GAE提供吗?

没有deleteKey命令从BKS文件丢失密钥

我在我的Android应用程序中使用密钥库(BKS格式)来存储公共私钥对。 该应用程序使用了很长时间,并有10多个公共私钥对。 突然之间,应用程序的主要function之一停止了工作。 发现根本原因如下: BKS文件中只剩下一个公共私钥对。 所有其他密钥对都丢失了。 我在代码中validation了应用程序中的任何位置都没有调用KeyStore.deleteEntry(别名)。 如果出现问题我唯一能找到的地方如下: 我们创建一个密钥对并使用以下方法设置它: KeyStore.setKeyEntry(keyId, keyPair.getPrivate(), getKeyStorePassword(), certChain); 上述方法的javadoc声明如下:如果给定别名已存在,则与给定密钥相关联的密钥库信息将被给定密钥(可能还有证书链)覆盖。 通常,从服务器获取的字符串是UUID,用作别名以在KeyStore中设置新的KeyPair。 因此,新别名与密钥库中已存在的别名相同的可能性非常小。 即使是这种情况,它也只会覆盖一对密钥对。 但是,在这种情况下,大约10个以上的密钥对丢失了。 有没有人知道导致这种密钥对丢失的任何已知问题? 附加信息: 我发现与每个密钥对的公钥相关联的证书仅在1年内有效。 我认为当在密钥库中设置新密钥对时,可以删除证书过期的密钥对。 但是,当我通过将有效期更改为30天来执行测试用例,并将设备时间更改超过30天时,无法再现该问题。 还有一件事我不确定它是否与此问题相关:目前生成的所有证书的序列号是BigInteger.ONE: X509v1CertificateBuilder certBuilder = new JcaX509v1CertificateBuilder(subject,BigInteger.ONE,notBefore,notAfter,subject,keyPair.getPublic()); 我认为这是错误的,但是,我不确定这是否会导致我所遇到的问题。 以下是设备中出现此问题的安全提供程序列表( Security.getProviders() ): AndroidKeyStoreBCWorkaround版本1.0 AndroidOpenSSL版本1.0 BC版本1.52 加密版1.0 HarmonyJSSE 1.0版 AndroidKeyStore版本1.0 因此,所有Java加密操作都是使用AndroidKeyStoreBCWorkaround版本1.0完成的。 该设备是Nexus 5,Android 6.0.1。

Chrome关闭后,Jsessionid cookie不会过期

我使用Shiro框架进行身份validation。 问题是:当我关闭Chrome浏览器并再次打开它时,我仍然可以访问受保护的URL。 如果我手动删除jsessionid cookie一切正常,则禁止访问受保护的URL。 在jsessionid的设置中,我看到: Expires:浏览会话结束时 。 所以它应该过期,但事实并非如此。 我也在firefox中进行了这个操作,没有那个问题。 我甚至不知道调查的方式。 PS我不使用shiro remember-mefunction。 但是,无论如何,在使用时,Shiro会创建另一个cookie(名为rememberMe)。

客户端和服务器之间的安全连接

我正在开发一个服务器组件,它将为嵌入式客户端提供服务,这也是我的控制。 现在一切都是测试版,安全性如下: 客户端通过https发送用户名/密码。 服务器返回访问令牌。 客户端通过自定义标头中的访问令牌通过http进行进一步请求。 这对于演示来说很好,但它有一些问题需要在发布之前修复: 任何人都可以复制login请求,重新发送并获取访问令牌。 有些用户回答说这不是问题,因为它超过了https。 我的错。 任何人都可以通过检查请求标头来监听并获取访问密钥。 我可以想到一个对称的密钥加密,带有时间戳,所以我可以拒绝重复的请求,但我想知道这个场景是否有一些众所周知的良好实践(这似乎很常见)。 非常感谢您的洞察力。 PS:我正在使用Java作为服务器而客户端是用C ++编写的,以防万一。

尝试删除文件时AccessControlException

我们有一个使用log4j进行日志记录的java Web服务应用程序。 当log4j尝试删除其滚动日志文件时,会抛出exception Exception:java.security.AccessControlException: access denied (java.io.FilePermission /var/opt/SUNWappserver/domains/domain1/ applications/j2ee-modules/ourwebservice/WEB-INF/logs/IMWrapper.log.10 delete) 当我们在目录中执行ls ,服务帐户有权读取和写入文件和目录。 从一些初始谷歌搜索看来,我们可能不得不更改security.policy文件以允许服务删除文件。 有什么建议么?

将文件下载到客户端系统中的特定位置

下面是我写的代码我要下载文件,现在我需要将文件下载到客户端系统中的特定位置。我将通过用户的输入获取路径。 我知道混淆客户端系统并不好,但我必须这样做 //setting the content type of response response.setContentType(“application/”+strFileType); response.setHeader(“content-disposition”,”attachment; filename=”+strFileName+”.”+strFileType); //creating a file input stream object InputStream input = blob.getBinaryStream(); //declaring a variable int i; while((i=input.read())!=-1) { //writing output printWriter.write(i); } //closing the streams input.close(); printWriter.close();

是否可以禁用RESTEasy的RoleBasedSecurityFilter.java?

我正在开发一个使用JBoss RESTEasy(resteasy-jaxrs-3.0.8)的Web应用程序,但我想禁用RoleBasedSecurityFilter.java并且只使用我自己的自定义SecurityInterceptor类(它也实现了javax.ws.rs.container.ContainerRequestFilter如RoleBasedSecurityFilter类所做的那样,它们都是安全filter。 原因是RoleBasedSecurityFilter.java中的第43行调用了一个isUserInRole()方法 ,该方法在我的应用程序中始终返回false。 结果导致抛出ForbiddenException ,这会阻止用户访问他应该有权访问的资源。 我真的希望能够使用@RolesAllowed批注来声明哪些角色可以访问某些function,但正如所解释的, RoleBasedSecurityFilter类阻止了这一点。 所以我的问题是,有没有人知道如何禁用一个特定的RESTEasyfilter(即RoleBasedSecurityFilter )? 我想它可以在部署描述符(web.xml)中完成(例如使用context-param元素 ),但我不知道如何实际禁用filter。 我意识到我也可以更改我正在使用的RESTEasy库中的RoleBasedSecurityFilter.java文件中的行,但是这种方法对我来说太难了,因为我不希望每次升级时都不得不再次应用这个hack RESTEasy版本。 (不知道那会是多久……)

使用BCrypt和char

几个小时前,我在Stack Overflow上询问了如何将char []转换为MD5哈希的方法。 提供了一个解决方案,但被认为是不安全的 – 正如几个人所概述的那样: 使用char []生成MD5哈希 Neil Smithline建议我使用BCrypt,但我无法使用char []的。 我使用char []存储从登录表单中检索的密码的原因是因为.getPassword()仅支持char []。 char[] passwordChars = passwordInputField.getPassword(); String hashed = BCrypt.hashpw(passwordChars, BCrypt.gensalt(12)); 目前,我试图使用上面的代码生成一个哈希,但由于变量passwordCars的类型为char [], BCrypt.haspw()不支持它 现在我没有使用常规字符串的唯一原因是因为它无法从内存中清除。 我现在的问题是 – 是否有可能以某种方式使用char []和BCrypt? 提前致谢!

user-by-username-query需要多于1个参数

我必须实现一个弹簧安全件,它有超过1个参数来获取用户。 它将通过其ID和产品名称获取用户。 我知道user-by-username-query只能给出一个参数,我想知道是否有可能给出许多用户 – 用户名 – 查询选项并给他们一些ID,但我不知道如何在validation时会引用。 有没有人有什么建议