标签: java-security

崩溃将AndroidKeyStoreRSAPrivateKey转换为RSAPrivateKey

我正在学习本教程:如何使用Android Keystore存储密码和其他敏感信息.它(松散地)与Google Sample应用程序绑定:BasicAndroidKeyStore.

我可以使用公钥加密我的数据,我可以在运行Lollipop的设备上解密.但是我有一个运行棉花糖的Nexus 6,这个崩溃给出了错误:

java.lang.RuntimeException: Unable to create application com.android.test: java.lang.ClassCastException: android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to java.security.interfaces.RSAPrivateKey
Run Code Online (Sandbox Code Playgroud)

这是它崩溃的代码:

KeyStore.Entry entry;

//Get Android KeyStore
ks = KeyStore.getInstance(KeystoreHelper.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);

// Weird artifact of Java API.  If you don't have an InputStream to load, you still need to call "load", or it'll crash.
ks.load(null);

// Load the key pair from the Android Key Store
entry = ks.getEntry(mAlias, null);

KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) entry;

//ERROR OCCURS HERE::
RSAPrivateKey …
Run Code Online (Sandbox Code Playgroud)

java android cryptography java-security android-6.0-marshmallow

41
推荐指数
3
解决办法
9910
查看次数

将.cer证书转换为.jks

我需要将.cer文件转换为.jks文件.我看到了一些关于它的问题,但没有看到我需要的解决方案.

我不需要它来将其添加到我的本地证书,但作为要上传到服务器的文件.我还需要只做一次,而不是以编程方式.有这个线程使用java将.cer转换为.jks并且作者说他已经成功完成了,但由于我没有足够的声誉,我无法评论他的上一个回复,我也不能向他发送个人信息并询问他.

所以,如果有人知道一个简单的方法,我会很高兴听到.

java certificate jks cer java-security

29
推荐指数
2
解决办法
7万
查看次数

java.security.UnrecoverableKeyException:无法获取有关私钥的信息

我有以下几行来从Android上的密钥存储区获取私钥

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);

// generating key pair code omitted

KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) this.keyStore.getEntry("alias", null);
Run Code Online (Sandbox Code Playgroud)

一切正常,但当操作系统从Android 5.1.1升级到Android 6.0.1时,第3行将java.security.UnrecoverableKeyException: Failed to obtain information about private key首先执行.但之后它会再次正常工作.现在我的解决方法是执行该行2次.与此同时,我也想知道是否有更好的方法来避免异常.

更新

异常跟踪

W/System.err? java.security.UnrecoverableKeyException: Failed to obtain information about private key
W/System.err? at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:217)
W/System.err? at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:253)
W/System.err? at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:263)
W/System.err? at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:93)
W/System.err? at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:372)
W/System.err? at java.security.KeyStore.getEntry(KeyStore.java:645)
W/System.err? at com.example.keystoretest.MainActivity.onCreate(MainActivity.java:113)
W/System.err? at android.app.Activity.performCreate(Activity.java:6251)
W/System.err? at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
W/System.err? at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
W/System.err? at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
W/System.err? at android.app.ActivityThread.-wrap11(ActivityThread.java)
W/System.err? at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) …
Run Code Online (Sandbox Code Playgroud)

java android keystore java-security private-key

22
推荐指数
1
解决办法
6529
查看次数

Google OAuth2 JWT令牌验证例外

我最后一小时面临OAuth2 JWT令牌验证异常(所以没有人可以访问我的应用程序):

java.security.SignatureException:签名长度不正确:得到256但是期望128.我正在使用google-http-client 1.20.0Java 1.7.0.到目前为止相同的配置 - 任何想法?

Stacktrace

java.security.SignatureException: Signature length not correct: got 256 but was expecting 128
    at sun.security.rsa.RSASignature.engineVerify(Unknown Source) ~[na:1.7.0_45]
    at java.security.Signature$Delegate.engineVerify(Unknown Source) ~[na:1.7.0_45]
    at java.security.Signature.verify(Unknown Source) ~[na:1.7.0_45]
    at com.google.api.client.util.SecurityUtils.verify(SecurityUtils.java:164) ~[google-http-client-1.20.0.jar:1.20.0]
Run Code Online (Sandbox Code Playgroud)

java jwt google-http-client java-security

21
推荐指数
2
解决办法
4218
查看次数

启用TLSv1.2和TLS_RSA_WITH_AES_256_CBC_SHA256密码套件

Server: 
TLS Version: v1.2
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA256 

Client:
JRE 1.7
Run Code Online (Sandbox Code Playgroud)

当我尝试通过SSL直接从客户端连接到服务器时,我收到以下错误:

Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
Run Code Online (Sandbox Code Playgroud)

以下代码启用TLSv1.2

  Set<String> enabledTLSSet = new HashSet<String>(Arrays.asList(sslsocket.getEnabledProtocols()));
  enabledTLSSet.add("TLSv1.2");      
  sslsocket.setEnabledProtocols(enabledTLSSet.toArray(new String[enabledTLSSet.size()]));
Run Code Online (Sandbox Code Playgroud)

以下代码启用了TLS_RSA_WITH_AES_256_CBC_SHA256密码套件:

Set<String> enabledCipherSuitesSet = new HashSet<String>(Arrays.asList(sslsocket.getEnabledCipherSuites()));
      enabledCipherSuitesSet.add("TLS_RSA_WITH_AES_256_CBC_SHA256");
      sslsocket.setEnabledCipherSuites(enabledCipherSuitesSet.toArray(new String[enabledCipherSuitesSet.size()]));
Run Code Online (Sandbox Code Playgroud)

从Java代码执行上述两个操作后,我可以通过SSL成功连接到服务器.

是否有可能使/力TLSv1.2TLS_RSA_WITH_AES_256_CBC_SHA256Java 7中,而无需通过性能,参数或调试道具改变任何Java代码?

我尝试了所有形式和组合(启用和禁用)以及失败的所有以下属性.

-Dhttps.protocols=TLSv1.2
-Dhttps.cipherSuites=TLS_RSA_WITH_AES_256_CBC_SHA256
-Ddeployment.security.TLSv1.2=true
Run Code Online (Sandbox Code Playgroud)

我正在执行类似下面的程序:

java -jar -Dhttps.protocols=TLSv1.2 -Dhttps.cipherSuites=TLS_RSA_WITH_AES_256_CBC_SHA256 Ddeployment.security.TLSv1.2=true -Djavax.net.debug=ssl:handshake SSLPoker.jar <SERVER> 443
Run Code Online (Sandbox Code Playgroud)

SSLPoker包含以下代码:

package com.ashok.ssl;

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

/**
 * Establish a SSL connection to a host and …
Run Code Online (Sandbox Code Playgroud)

encryption ssl java-7 java-security tls1.2

20
推荐指数
2
解决办法
7万
查看次数

UnrecoverableKeyException无法获取有关私钥的信息,KeyStoreException:无效的密钥blob

在我们的应用程序中,我们一直遇到Android Keystore中的数据突然变得无法访问的问题.我们看到的具体例外情况如下:

java.security.UnrecoverableKeyException: Failed to obtain information about private key
 at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:223)
 at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:259)
 at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:269)
 at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:94)
 at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:474)
 at java.security.KeyStore.getEntry(KeyStore.java:1560)
 at <PACKAGE_NAME>.EncryptionInteractor.generateKeys(EncryptionInteractor.java:104)
 at <PACKAGE_NAME>.EncryptionInteractor.generateKeys(EncryptionInteractor.java:100)
 at <PACKAGE_NAME>.EncryptionInteractor.init(EncryptionInteractor.java:93)
 at <PACKAGE_NAME>.EncryptionInteractor.<init>(EncryptionInteractor.java:80)
 at <PACKAGE_NAME>.EncryptionInteractor.init(EncryptionInteractor.java:65)
 at <PACKAGE_NAME>.<APPLICATION_CLASS>.onCreate(APPLICATION_CLASS.java:17)
 at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1118)
 at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5791)
 at android.app.ActivityThread.-wrap1(Unknown Source:0)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661)
 at android.os.Handler.dispatchMessage(Handler.java:105)
 at android.os.Looper.loop(Looper.java:164)
 at android.app.ActivityThread.main(ActivityThread.java:6541)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: android.security.KeyStoreException: Invalid key blob
 at android.security.KeyStore.getKeyStoreException(KeyStore.java:695)
 at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:224)
  ... 21 more
Run Code Online (Sandbox Code Playgroud)

我们无法想出一种可靠的方法来重现这个问题.有几篇文章提到了可能导致密钥库"忘记"密钥或被锁定的状态,例如此处.但是,据我所知,我们没有陷入任何这些边缘情况.在首次设置密钥后让设备静置一段时间后,似乎会发生这种情况.我们已经看到这种情况发生在多个仿真器和设备上,范围从21到26.此外,这些设备使用了滑动解锁或PIN.更改PIN或安全方法似乎不会导致此问题.同样,这个问题似乎是在设备未使用几天之后发生的.

我在这里这里找到了另外两个SO 以及一个Google 问题.如果我理解正确,两者相关的答案似乎都依赖于调用者 …

android android-keystore java-security private-key android-security

17
推荐指数
1
解决办法
1295
查看次数

apache mina sshd验证客户端签名

我正在尝试验证客户端从其私钥生成的签名并发送到服务器.

我能在图书馆找到唯一合适的认证者就是PublickeyAuthenticator.如果这是错误的类,请纠正我.

我目前有:

this.sshServer.setPublickeyAuthenticator(new PublickeyAuthenticator() {
                @Override
                public boolean authenticate(String username, PublicKey key, ServerSession session) {
                    if (username.equals("client")) {
                         //if signature == valid??
                         return true;
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

有谁知道mina是否支持签名验证,如果支持,如何实施?

我的理解是,我首先必须将用户公钥分配/添加到服务器.如果客户端提供了id_rsa.pub文件,我该如何将此文件作为公钥添加到服务器?

java apache-mina sshd java-security

13
推荐指数
1
解决办法
1156
查看次数

Java相当于SecureString

我正在寻找Java相当于.NET的SecureString.aspx.是否有这样的实施在2018年?

OWASP实现并不完全相同,因为它只是一个普通的char数组.虽然.NET等价物提供了额外的功能,例如从/向非托管内存获取实例的能力以及加密.

我知道普通的Java模式传递密码,char[]Arrays.fill()在使用后用零做.但它需要在char[]所有时间内构建一个简单的实用程序类.

java securestring java-security

13
推荐指数
2
解决办法
3630
查看次数

Mac OS X上的JRE lib/security目录在哪里?

我需要生成一个证书,但找不到这个目录.谢谢!

java macos pki java-security

11
推荐指数
3
解决办法
2万
查看次数

如何在某些java类或包上限制createObject()?

我想创建一个安全的ColdFusion环境,我正在使用多个沙箱配置.使用友好的管理员界面可轻松实现以下任务:

  • 限制CFtags如:cfexecute,cfregistry和cfhttp.
  • 禁用对内部ColdFusion Java组件的访问.
  • 仅通过第三方资源访问某些服务器和端口范围.

而其他人则相应地使用Web服务器的配置.

问题:

所以我对设置感到满意只是为了以后遇到,无论应用于cfexecute标签的限制如何,都可以用来java.lang.Runtime轻松地执行系统文件或脚本;

String[] cmd = {"cmd.exe", 'net stop "ColdFusion 10 Application Server"'};
Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)

或使用java.lang.ProcessBuilder:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", 'net stop "ColdFusion 10 Application Server"');
....
Process myProcess = pb.start();
Run Code Online (Sandbox Code Playgroud)

问题是我找不到任何允许我禁用这两个类的解决方案:java.lang.Runtime&java.lang.ProcessBuilderfor the createObject().对于注释:我已经在sanbox和os权限中尝试过文件限制,但不幸的是它们似乎只在I/O文件操作上工作,我不能搞乱系统库的安全策略,因为它们可能在内部使用通过ColdFusion.

coldfusion jvm-arguments cfadmin java-security

11
推荐指数
1
解决办法
784
查看次数