Articles of 安全性

在Android设备上存储新密码后,“stream不代表PKCS12密钥存储”

我写了一个使用KeyStore来validationSSL连接的Android应用程序。 但是,当我用正确的密钥加载p12文件并存储一个新的,下一次我尝试加载它与新的密钥我得到这个exception: java.io.IOException:stream不代表PKCS12密钥库 在com.android.org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(JDKPKCS12KeyStore.java:691) 在java.security.KeyStore.load(KeyStore.java:589) 出了什么问题? 非常感谢你!

Android java.security.cert.CertPathValidatorException:找不到证书path的信任锚点

有三个主机,一个Android应用程序进行身份validation和授权。 最终主机是REST API。 这是第一次使用Oauthauthentication和授权过程,没有问题。 但是,如果用户在login后杀死应用程序 ,并访问REST API提供的服务,然后再次打开应用程序,则会出现此问题。 在这个时候authentication和授权过程不会发生,只有REST API。 它导致java.security.cert.CertPathValidatorException 但它在第一次使用(login,然后使用应用程序)期间工作。 有人可以解释这个例外背后的情况,什么是错的应用程序。 根据这个答案,如果authentication例外被忽略, 这是有效的 。 SSLSocketFactory sslSocketFactory = null; try { TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); // Initialise the TMF as you normally would, for example: try { tmf.init((KeyStore)null); } catch(KeyStoreException e) { e.printStackTrace(); } TrustManager[] trustManagers = tmf.getTrustManagers(); final X509TrustManager origTrustmanager = (X509TrustManager)trustManagers[0]; // […]

java.security.cert.CertPathValidatorException:未find证书path的信任锚点。 Android 2.3

在我的服务器(生产服务器),我有一个goDaddy ssl证书。 我有iOS和Android应用程序连接到服务器,iOS连接没有问题,Android与版本4. *一切都很好,但设备与2.3。*我总是得到一个SSLHandshakeException。 我完全喜欢Android开发者页面( https://developer.android.com/training/articles/security-ssl.html )。 我已经在这里看到类似的线程在这里( 这里 ),但没有任何帮助。 然后我看到这个线程谈论扩展密钥的使用,但是在debugging时,我得到以下信息: [2]: OID: 2.5.29.37, Critical: false Extended Key Usage: [ "1.3.6.1.5.5.7.3.1", "1.3.6.1.5.5.7.3.2" ] 所以我猜这个证书不是“强制”扩展密钥的使用。 另外在这个线程还有一些其他可能的原因,如date/时间完全错误,这些都不存在。 考虑到这一点,我现在不知道问题出在哪里。 有什么build议么? 编辑: StackTrace下面: 08-04 16:54:30.139: W/System.err(4832): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 08-04 16:54:30.149: W/System.err(4832): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:161) 08-04 16:54:30.149: W/System.err(4832): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:664) 08-04 16:54:30.149: […]

如何使一个“安卓解锁”应用程序更安全的对付cookies?

对于我的应用程序的付费版本,我正在select解锁器应用程序路由,因为它很容易实现,允许开发人员控制台中的个人统计信息,但主要是因为我不需要维护2个代码库(一个用于免费版本和另一个为付费版本)。 即使我使用了CVS(我也这样做),继续合并function和错误修复仍然是一件痛苦的事情。 解锁器应用程序是更容易实施总体… 但是这带来了严重的缺点,超出安全检查真的很容易。 除非我在这里失去了一些东西。 无论我做什么,这样的实现总是会导致一个简单的, if这样的话: if(Program.isPremiumVersion()) { // Remove ads… } isPremiumVersion()方法是负责检查付费解锁器应用程序安装的所有工作,如果证书匹配和所有的东西。 是的,解锁的应用程序受到LVL的保护(尽pipe我已经阅读了几篇文章,提到LVL是不安全的,但现在不是这一点)。 但最终,无论isPremiumVersion()获取的代码多么复杂,它总是会返回true或false值。 覆盖这样的安全特性只是对代码进行逆向工程,并使其始终返回true 。 不是吗? 我们怎样才能保护我们的Android应用程序呢? 是的,代码被ProGuard混淆了。 不过,对于有足够熟练的人来说不应该太难。 请注意,我并不是想要打击cookies,我们根本无法取胜。 我不会为此失眠,在“完美的解决scheme”上浪费无数的时间。 我只是想找一个方法让它更安全一些。 至less在理论上这似乎很容易破解。 我错了吗? 任何想法,以提高这种function的安全性?

Android KeyStore私有指数无法提取

我想在Android密钥库中生成一个RSA密钥对。 由于Android 4.3应该可以在Android系统密钥库中生成RSA密钥。 我生成我的RSA密钥(工作正常) Calendar notBefore = Calendar.getInstance(); Calendar notAfter = Calendar.getInstance(); notAfter.add(1, Calendar.YEAR); KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx) .setAlias("key") .setSubject( new X500Principal(String.format("CN=%s, OU=%s", "key", ctx.getPackageName()))) .setSerialNumber(BigInteger.ONE) .setStartDate(notBefore.getTime()) .setEndDate(notAfter.getTime()).build(); KeyPairGenerator kpg; kpg = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); kpg.initialize(spec); KeyPair kp = kpg.genKeyPair(); publicKey = kp.getPublic(); privateKey = kp.getPrivate(); 我的RSAencryption看起来像(也有效): public static byte[] RSAEncrypt(final byte[] plain) throws NoSuchAlgorithmException, […]

我们应该使用谷歌的安全提供商与OkHttp?

我们在我们的Android项目中使用okhttp来与我们的API交谈; 所有通讯都使用SSL / TLS进行encryption,而我们的服务器可以说SPDY。 我们还将Google Play服务链接到融合位置提供商和其他一些function。 我们目前没有使用的Play服务的一部分是他们的安全提供商 ,它承诺升级设备的SSL堆栈以防止各种漏洞。 但是,这些文档对于提供者实际做了什么以及哪些SSL方法受到影响,哪些不是(仅提供了每个SSL方法的一些示例,而不是全面的列表),有些模糊。 所以,我想我的问题是双重的: dynamic安全提供程序甚至可以使用okhttp,还是okhttp依赖于不受安装提供程序影响的较低级别(或更高级别)的API? 假设它工作,有什么好处? 有值得关心的安全性好处吗? 它实际上是否修复了okhttp 2.2中ALPN相关的本地崩溃,因为nfuller暗示它可能 ?

保护string常数免于逆向工程

我有Android应用程序硬编码(静态string常量)凭据(用户/传递)通过SMTP发送电子邮件。 问题是.apk中的.dex文件可以很容易地进行反向工程,每个人都可以看到我的密码。 有没有办法如何获得这些凭据,而我仍然可以在我的课程中使用它们?

在具有多个允许签名的Android服务上实现签名级安全性

我正在开发一个应用程序,其中包含了很多个人用户信息,比如Facebook联系人等等。现在,我希望能够做的事情之一(相当有效)使用Android内置的进程间通信协议(AIDL),将部分应用程序开放给“第三方”应用程序。 到现在为止还挺好。 这里有一个问题:因为我们涉及处理相当多的个人信息,所以我们必须非常小心谁可以访问它, 具体而言,只有“可信”应用程序才能够这样做。 所以自然而然的做法是在我们声明服务的AndroidManifest.xml文件中使用自定义权限。 我的问题是这样的:我想能够制定签名级别的保护(类似于正常的“签名”权限级别),但有一点问题: 我不仅希望用我们的内部签名签名的应用程序能够访问这些服务。 我希望能够在运行时(或者如果有更好的方法,那么也许是其他时间?)build立一个“可信签名”列表,能够检查这个可信密钥列表的入局请求。 这与我认为的正常的“签名”权限级别一样满足安全限制 – 只有“可信密钥列表”上的程序才能够访问这些服务,并且密钥很难被欺骗(如果可能的话, ) – 但是还有额外的好处,就是我们不需要用我们内部团队的密钥来签署每个使用API​​的应用程序。 这在Android目前可能吗? 如果是这样,有什么特殊要求吗? 谢谢

针对不安全的TrustManager的Google Play安全警报

在我的一个应用程序中,我使用HTTPS和自签名证书,并遵循Android开发人员培训网站( https://developer.android.com/training/articles/security-ssl.html#UnknownCa ) 。 我最近得到了以下警告,说当前的实现是不安全的: 安全警报 您的应用程序正在使用Apache HTTP客户端的X509TrustManager接口的不安全实现,导致安全漏洞。 有关详细信息,请参阅此Google帮助中心文章 ,其中包括修复漏洞的截止date。 有人可以提供更多的细节,应该在上面链接的示例代码之外更新什么? 我应该实施一个自定义的TrustManager ? 如果是这样,它应该validation什么?

通过移动应用程序保护通信?

Android / Iphone应用程序将从服务器访问应用程序数据。 [Django的Python的] 我如何确保与移动应用程序的沟通? 预期 :足够安全的密码等敏感信息,除暴力外,不应有直接的解密方式。 我的要求 : 身份validation[只有应用程序被授权] 诚信[消息不应该修改] 隐私[通信不应该是可读的,如果嗅探] 我的努力 : SSL只validation服务器,而不是客户端。 我不能使用对称encryption[只提供隐私] 数字签名是不可能的[缺乏隐私] PGP全部满足所有3个要求。 问题 : PGP需要在客户端应用程序上存储密钥。 似乎没有确保在客户端应用程序上保护键的方法。 如果密钥不存在,那么PGP或对称encryption同样易受攻击。 反向工程PGP键或四元键同样困难。 在这种情况下,PGP是移动处理器的无意义负担。 OAuth也是无用的,因为它也有一个客户端密钥。 那么,我怎么能/应该向前迈进呢? 行业如何处理这个问题? 我应该采取休闲的方法: 使用简单的SSL并跨过我的手指? ,因为如果密钥被盗,authentication是不可能的? (只有服务器authentication是可能的) 更新: 结论是使用AES,因为如果我能保证密钥的安全,那么我就和SSL一样好。 此外,我可以不断改变关键的时间,以提高安全性。 如果你认为有更好的办法,可以贡献一下,在发布前阅读整篇文章。