标签: android-keystore

"错误的密钥库版本"错误.如何创建version = 1密钥库证书?

我在使用SSL时遇到问题,因为我收到了与我的密钥库相关的以下错误(使用keytool自行创建和自签名:http://developer.android.com/tools/publishing/app-signing.html) :

08-14 20:55:23.044:W/System.err(5430):java.io.IOException:密钥库的错误版本.08-14 20:55:23.060:W/System.err(5430):at org.bouncycastle.jce.provider.JDKKeyStore.engineLoad(JDKKeyStore.java:812)...

JDKKeyStore.java类中引发的错误出现在以下代码中:

来自JDKKeyStore.java的Blockquote:
if(version!= STORE_VERSION){if(version!= 0){throw new IOException("key store的错误版本."); }}

大段引用

在这种情况下,STORE_VERSION = 1,我的版本= 3基于读取我创建的密钥库所持有的证书的详细信息.我不知道如何生成包含version = 1证书的密钥库.

我发现这个答案很有帮助: 在进行https调用时错误的版本密钥库

但是它要求使用以下参数创建密钥库:

-storetype BKS
-provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath
/path/to/bouncycastle.jar

但是,当我尝试使用以下参数创建keytool(使用Mac上的终端应用程序)时:

keytool -genkeypair -v -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 -keypass android -keystore /Users/djames/dropbox/bc146keystore/debug.keystore -storepass android -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /用户/ djames /保管箱/ bc146keystore /

(其中/ Users/djames/dropbox/bc146keystore /是充气城堡罐子的路径:bcprov-jdk16-146.jar)

我收到以下错误:

keytool错误:java.lang.RuntimeException:用法错误,?providerpath不是合法命令java.lang.RuntimeException:用法错误,?providerpath不是sun.security.tools.KeyTool.parseArgs的合法命令(KeyTool.java: 375)sun.security.tools.KeyTool.run(KeyTool.java:171)at sun.security.tools.KeyTool.main(KeyTool.java:166)

我不明白这告诉我的是什么.如果我使用:keytool -help它告诉我以下是-genkeypair选项的有效选项:

-genkeypair [-v] [-protected] [-alias] [-keyalg] [-keysize] [-sigalg] [-dname] [-validity] …

ssl android keytool android-keystore

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

使用source/build/target/product/security /中的密钥将apk签名为系统

正如标题所述,我正在尝试使用platform.x509.pem和platform.pk8签署我的应用程序.问题是我在使用keytool-importkeypairs添加这些时会出错:

keytool-importkeypair -k ~/.android/debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform
Run Code Online (Sandbox Code Playgroud)


当我尝试使用SignApk.jar直接签署APK时,我也会收到错误:

java -jar SignApk.jar platform.x509.pem platform.pk8 test-app.apk test-app-signed.apk
Run Code Online (Sandbox Code Playgroud)


Keytool-importkeypairs错误:

Error decrypting key
3074042056:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
3074042056:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO
unable to load private key
3074091208:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: ANY PRIVATE KEY
Importing "platform" with unable to load certificate
3073755336:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE
keytool error: java.lang.Exception: Source keystore file exists, but is empty: /tmp/keytool-importkeypair.vDOP/p12
Run Code Online (Sandbox Code Playgroud)


使用的来源:具有系统权限的Apk,如何使用系统签名对Android应用进行签名?(SO),以及如何将android dev手机2从1.6更新到2.1
上面的链接中描述的方法现在都没有,正如你所看到的那样.提前致谢.

java android keystore apk android-keystore

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

Google地图未在发布模式下显示在Android上

我试图发布我的应用程序,但谷歌地图有问题.该应用程序包含一个显示地图的活动(MapActivity).在调试模式下运行时,地图工作正常.我在发布模式下签署了我的应用程序,并获得了SHA1.我根据需要在Google控制台上创建了一个新的Android密钥(SHA1; packageName).获得了API密钥

在我的应用程序中,我根据需要引用了google-play-services-lib的副本.我正在使用ADT.

map.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment" />
Run Code Online (Sandbox Code Playgroud)

MapActivity.java

public class MapActivity extends FragmentActivity {

private GoogleMap map;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);

    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                        .getMap();
  }
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.rentalcar"
android:versionCode="1"
android:versionName="1.0" >



<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>

<permission
      android:name="com.example.rentalcar.permission.MAPS_RECEIVE"
      android:protectionLevel="signature"/>
    <uses-permission android:name="com.example.rentalcar.permission.MAPS_RECEIVE"/>


<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
     >

    <activity …
Run Code Online (Sandbox Code Playgroud)

android google-maps keytool android-keystore android-maps-v2

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

Android密钥库 - 如果用户密钥设置为该用户,则可以由root用户检索用户密钥吗?

从Android 4.3开始,Android就拥有了自己的密钥库,我可以在其中存储密钥并在以后用于加密/解密.

据说这里这里每个键只能由其所有者进行检索,甚至没有根可以得到它.

我的问题是:我不能写一个程序,将我的uid切换到密钥的所有者,检索它,然后用它来解密我不应该访问的数据?

编辑:添加了对密钥库文档的引用.

security encryption android android-keystore

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

Android 4.3 KeyStore - 在尝试检索密钥时链== null

这篇博客之后,我正在使用此代码KeyPair在Android KeyStore中创建和存储:

Context ctx = getApplicationContext();
Calendar notBefore = Calendar.getInstance();
Calendar notAfter = Calendar.getInstance();
notAfter.add(1, Calendar.YEAR);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx).
setAlias(RSA_KEYS_ALIAS).setSubject(
  new X500Principal(String.format("CN=%s, OU=%s", 
    getApplicationName(), ctx.getPackageName()))).
setSerialNumber(BigInteger.ONE).
setStartDate(notBefore.getTime()).setEndDate(notAfter.getTime()).build();

KeyPairGenerator kpGenerator;
try {
    kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");

    kpGenerator.initialize(spec);
    kpGenerator.generateKeyPair();
} catch (Exception e) {
    showException(e);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此代码从KeyStore检索公钥时,会抛出NullPointerException带有消息的a chain == null.

public RSAPublicKey getRSAPublicKey() {
    RSAPublicKey result = null;
    try {
        KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
        keyStore.load(null);
        KeyStore.PrivateKeyEntry keyEntry = 
            (KeyStore.PrivateKeyEntry) keyStore.getEntry(RSA_KEYS_ALIAS, null); // --< …
Run Code Online (Sandbox Code Playgroud)

android rsa android-keystore android-4.3-jelly-bean

7
推荐指数
1
解决办法
1222
查看次数

Android debug.keystore SHA1 是否对所有人都相同?

当我们安装我们的 android sdk 时会自动生成 debug.keystore。那么我们的 debug.keystore 在所有机器上都会有相同的 SHA1 吗?

android android-install-apk android-keystore

7
推荐指数
1
解决办法
2379
查看次数

EncryptedSharedPreferences 导致 UnrecoverableKeyException

我正在以EncryptedSharedPreferencesGoogle 推荐的方式使用新类:

private fun securePrefs(context: Context): SharedPreferences {
    val fileName = "sharedPrefsSecure"
    val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
    return EncryptedSharedPreferences.create(fileName, masterKeyAlias, context,
        EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)
}
Run Code Online (Sandbox Code Playgroud)

但是,该应用程序在第二天在模拟器(Pixel 2 API 26)上崩溃了。每次启动应用程序时都会发生这种情况,直到我完全卸载它并再次重新安装(从带有运行的 Studio) - 然后它工作正常。但是,一旦我重新启动模拟器,它就会再次崩溃,直到完全重新安装。即使在重新启动后,我的三星也很好。我想知道我是否也会在真实设备上得到类似的东西。

这是崩溃堆栈跟踪:

2020-02-24 17:42:52.632 12398-12398/com.myapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myapp, PID: 12398
    java.security.UnrecoverableKeyException: Failed to obtain information about key
        at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreSecretKeyFromKeystore(AndroidKeyStoreProvider.java:282)
        at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:98)
        at java.security.KeyStore.getKey(KeyStore.java:1062)
        at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.<init>(AndroidKeystoreAesGcm.java:48)
        at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead(AndroidKeystoreKmsClient.java:111)
        at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getOrGenerateNewAeadKey(AndroidKeystoreKmsClient.java:130)
        at com.google.crypto.tink.integration.android.AndroidKeysetManager.<init>(AndroidKeysetManager.java:118)
        at com.google.crypto.tink.integration.android.AndroidKeysetManager.<init>(AndroidKeysetManager.java:88)
        at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:185)
        at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:123)
        at com.myapp.base.service.DefaultKeystoreService.securePrefs(DefaultKeystoreService.kt:43)
        at com.myapp.base.service.DefaultKeystoreService.sharedPrefsForKey(DefaultKeystoreService.kt:37)
        at com.myapp.base.service.DefaultKeystoreService.get(DefaultKeystoreService.kt:17)
        at com.myapp.base.repository.DefaultCredentialsRepository.getRefreshToken(DefaultCredentialsRepository.kt:78)
        at …
Run Code Online (Sandbox Code Playgroud)

android android-keystore androidx androidx-security

7
推荐指数
0
解决办法
1656
查看次数

如何解决 Android 10 上的 KeyStoreConnectException?

我的应用程序在除 Android 10 之外的所有 Android 操作系统上运行良好。我使用的是 Motorola One Power 设备,该设备已更新为 Android 10。我们使用 Android Keystore 来加密数据库。

应用程序在 luanch 上崩溃并出现以下错误。

android.security.keystore.KeyStoreConnectException:无法与 javax 处 android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:256) 处的密钥库服务通信 android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:148) 处.crypto.Cipher.tryTransformWithProvider(Cipher.java:2980)

它是 KeyStoreConnectException 问题。应用程序需要一些时间才能连接到 KeyStoreConnectException。

注意:如果我在调试模式下运行应用程序,那么它工作正常。

请帮助我找到解决方案。提前致谢。

android android-keystore android-security keystore-access

7
推荐指数
1
解决办法
1821
查看次数

使用 Expo 备份 Android 密钥库 - 我们是否需要保存关联的密码?

运行时expo fetch:android:keystore显示如下:

Configuring credentials for myApp in project myApp
Keystore credentials
  Keystore password: 1234567890abcdef1234567890abcdef
  Key alias:         1234567890abcdef1234567890abcd==
  Key password:      1234567890abcdef1234567890abcdef

  Path to Keystore:  C:\projects\myApp\myApp.jks
Run Code Online (Sandbox Code Playgroud)

我的问题是,我们需要单独存储密码和别名,还是只存储.jks文件?

这一点在世博会相关文件中并没有明确说明。

android keystore android-keystore react-native expo

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

如何使用 private_key.pepk 签署 Android 应用程序

我在 Google Play 中有一个应用程序,现在我需要发布该应用程序的新版本 2。

如何使用 private_key.pepk 签署 Android 应用程序?

我丢失了 Java 密钥库(.jks 或 .keystore) 我只有 private_key.pepk

android google-play android-keystore google-play-console

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