Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在2019年使用windows 10从CRT创建BKS文件_Android_Ssl - Fatal编程技术网

Android 如何在2019年使用windows 10从CRT创建BKS文件

Android 如何在2019年使用windows 10从CRT创建BKS文件,android,ssl,Android,Ssl,我想用bks文件固定ssl。但是我不知道怎么做。我关心的是防止任何中间人看到API调用我的Android应用程序。我知道我需要锁定ssl。一种方法是使用改装。(这太容易了) 另外,从任何网站获取sha256密钥都非常容易使用 我不明白这种方式如何提高安全性。所以我决定在应用程序中使用pining BKS文件。但这太难了 我知道我应该创建BKS文件,并将其嵌入android应用程序中进行ssl固定。但是我不明白如何在Windows10中创建BKS文件。我发现关于创建BK的信息很少,而且它们太旧了,

我想用bks文件固定ssl。但是我不知道怎么做。我关心的是防止任何中间人看到API调用我的Android应用程序。我知道我需要锁定ssl。一种方法是使用改装。(这太容易了)

另外,从任何网站获取sha256密钥都非常容易使用 我不明白这种方式如何提高安全性。所以我决定在应用程序中使用pining BKS文件。但这太难了

我知道我应该创建BKS文件,并将其嵌入android应用程序中进行ssl固定。但是我不明白如何在Windows10中创建BKS文件。我发现关于创建BK的信息很少,而且它们太旧了,在windows中找不到android keytool或jre。这里只有一个老例子
我是斯图克,我需要你的帮助。提前感谢

步骤1:获取您的公钥证书

要获取公钥,您可以询问公司的安全人员,也可以从浏览器轻松访问您的端点(api.sample.com或sample.com,无论您想在哪里进行SSL固定),然后单击绿锁图标>证书

然后将证书图标拖放到桌面上。完成。你有公共证书

步骤2:创建BKS文件

您需要下载bouncy castle jar来创建BKS文件。bouncy castle是一个加密API。您可以从下载最新版本

现在,您可以使用keytool和bouncy castle提供程序创建BKS文件

keytool -importcert -v -trustcacerts -file "[YOUR_PUBLIC_CERTIFICATE_PATH]" -alias [YOUR_ALIAS] -keystore "[BKS_TARGET_PATH]" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "[BOUNCY_CASTLE_JAR_PATH]" -storetype BKS -storepass [YOUR_PASSWORD]
例如:-

keytool -importcert -v -trustcacerts -file "/user/mert/testcertificate.cer" -alias mytestalias -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword
此命令将使用您的公共证书创建BKS文件。如果 如果要添加多个证书,请使用 另一份公开证书。此命令将检查目标路径 并将新证书添加到现有的BKS文件中,以使BKS文件 将包含两个证书

让我们向同一个BKS文件添加多个证书

keytool -importcert -v -trustcacerts -file "/user/mert/testcertificate.cer" -alias mytestalias -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword

keytool -importcert -v -trustcacerts -file "/user/mert/testcertificate2.cer" -alias mytestalias2 -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword
正如您可能看到的,我运行相同的命令,keytool将向相同的BKS文件中添加另一个证书。但是请注意,您应该为证书使用不同的别名

让我们检查一下BKS文件是否真的有2个证书。要在BKS文件中列出证书,需要运行以下命令

keytool -list -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword
它将显示BKS文件中的公共证书

keytool -importcert -v -trustcacerts -file "/user/mert/testcertificate.cer" -alias mytestalias -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword

keytool -importcert -v -trustcacerts -file "/user/mert/testcertificate2.cer" -alias mytestalias2 -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword

我们已经成功创建了一个包含2个不同公钥的BKS文件

因此,如果应用程序中有两个不同的端点,并且端点没有相同的公钥,则可以使用多个证书在应用程序中执行SSL固定

步骤3:将SSL固定应用于OkHttp客户端 我为ssl固定创建了一个助手类。这个类接受3个参数

  • 上下文
  • BKS文件
  • BKS密码(在命令行中键入)
您可以从中找到代码

您需要在res/raw/文件夹下找到BKS文件

差不多完成了。您只需将此SSL pinner连接到您的okhttp客户端

RawCertificatePinner pinner = new RawCertificatePinner(context, R.raw.mycertificate, 
 "mypassword");
 OkHttpClient.Builder builder = new OkHttpClient.Builder();
 builder = rawCertificatePinner.pinCertificate(builder);
 return new Retrofit.Builder()
        .client(builder.build())
        ...
        .build();

当有一个简单的UI甚至允许直接创建BKS v1/v2文件时,为什么还要麻烦使用神秘的命令行命令:(GPL)