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

时间:2019-06-17 07:23:46

标签: android ssl

我想用bks文件固定ssl。但我不知道该怎么做。我担心的是阻止任何中间人看到我的android应用程序的api调用。我知道我需要固定ssl。一种方法是使用改造。 (太简单了)

CertificatePinner certPinner = new CertificatePinner.Builder()
    .add("appmattus.com",
          "sha256/4hw5tz+scE+TW+mlai5YipDfFWn1dqvfLG+nU7tq1V8=")
    .build();

OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .certificatePinner(certPinner)
    .build();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://appmattus.com")
    .addConverterFactory(GsonConverterFactory.create())
    .client(okHttpClient)
    .build();

使用https://www.ssllabs.com/ssltest/analyze还可从任何网站上获取sha256密钥非常容易 而且我不明白这种方式如何提高安全性。因此,我决定使用将BKS文件固定到应用程序中。但这太难了。

我知道我应该创建BKS文件并将其嵌入android应用中以进行ssl固定。但是我不明白如何在Windows 10中创建该BKS文件。我发现有关创建BKS的信息很少,而且它们太旧了,无法在Windows中找到android keytool或jre。这只是一个老例子 http://transoceanic.blogspot.com/2011/11/android-import-ssl-certificate-and-use.html 我是stuk,需要您的帮助。预先感谢

1 个答案:

答案 0 :(得分:0)

第1步:获取您的公共密钥证书

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

enter image description here

然后将证书图标拖放到桌面。做完了您有公共证书。

第2步:创建BKS文件

您需要下载充气城堡罐子才能创建BKS文件。充气城堡是一种加密API。您可以从here下载最新版本。

现在,您可以使用keytool和有弹性的城堡提供程序来创建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文件中的公共证书。

enter image description here

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

因此,如果您的应用程序中有2个不同的终结点,并且终结点没有相同的公钥,则可以使用多个证书在应用程序中进行SSL固定。

第3步:将SSL固定应用于OkHttp客户端 我创建了一个用于SSL固定的帮助程序类。此类包含3个参数。

  • 上下文
  • BKS文件
  • BKS密码(您在命令行中键入)

您可以从here

中找到代码。

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

快完成了。您所需要做的就是将此SSL固定器附加到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();