是否有必要将 SPKI 哈希安全地存储在 android 中?
Is it necessary to store SPKI hash securely in android?
我正在尝试启用 public 密钥固定,因为我不想为每次证书续订发布更新,前提是我每次都使用相同的 CSR。
我用这个脚本生成了哈希。
#!/bin/bash
certs=`openssl s_client -servername -host -port 443 -showcerts </dev/null 2>/dev/null | sed -n '/Certificate chain/,/Server certificate/p'`
rest=$certs
while [[ "$rest" =~ '-----BEGIN CERTIFICATE-----' ]]
do
cert="${rest%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
rest=${rest#*-----END CERTIFICATE-----}
echo `echo "$cert" | grep 's:' | sed 's/.*s:\(.*\)//'`
echo "$cert" | openssl x509 -pubkey -noout |
openssl rsa -pubin -outform der 2>/dev/null |
openssl dgst -sha256 -binary | openssl enc -base64
done
希望不会变!
我正在使用 okhttp3 certificatePinner 将其嵌入到改造中。
private CertificatePinner getCertificatePinner() {
return new CertificatePinner.Builder()
.add("<api base URL>",
"sha256/<the key>")
.build();
}
我的问题是我们是否应该使用 NDK 或其他方式将其安全地存储在应用程序中?因为如果每个人都知道 API 基础 URL.
就可以生成这个密钥
不确定这是否是一个愚蠢的问题。
谢谢
这不是秘密,您可以随意存储证书密码。但大多数建议都反对使用证书固定,除非您知道自己在做什么以及您的安全团队证书策略是什么。从实时服务器获取它会在他们轮换证书或切换到备份时遇到麻烦。
我正在尝试启用 public 密钥固定,因为我不想为每次证书续订发布更新,前提是我每次都使用相同的 CSR。
我用这个脚本生成了哈希。
#!/bin/bash
certs=`openssl s_client -servername -host -port 443 -showcerts </dev/null 2>/dev/null | sed -n '/Certificate chain/,/Server certificate/p'`
rest=$certs
while [[ "$rest" =~ '-----BEGIN CERTIFICATE-----' ]]
do
cert="${rest%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
rest=${rest#*-----END CERTIFICATE-----}
echo `echo "$cert" | grep 's:' | sed 's/.*s:\(.*\)//'`
echo "$cert" | openssl x509 -pubkey -noout |
openssl rsa -pubin -outform der 2>/dev/null |
openssl dgst -sha256 -binary | openssl enc -base64
done
希望不会变!
我正在使用 okhttp3 certificatePinner 将其嵌入到改造中。
private CertificatePinner getCertificatePinner() {
return new CertificatePinner.Builder()
.add("<api base URL>",
"sha256/<the key>")
.build();
}
我的问题是我们是否应该使用 NDK 或其他方式将其安全地存储在应用程序中?因为如果每个人都知道 API 基础 URL.
就可以生成这个密钥不确定这是否是一个愚蠢的问题。
谢谢
这不是秘密,您可以随意存储证书密码。但大多数建议都反对使用证书固定,除非您知道自己在做什么以及您的安全团队证书策略是什么。从实时服务器获取它会在他们轮换证书或切换到备份时遇到麻烦。