sil*_*udo 3 java ssl sha256 rsa-sha256
我正在尝试从公钥证书中读取 sha256。证书如下所示。
我正在运行以下命令来读取 sha256 哈希,但它没有给出正确的结果:
openssl x509 -in test.crt -pubkey -noout | openssl rsa -pubin -outform der | \
openssl dgst -sha256 -binary | openssl enc -base64
Run Code Online (Sandbox Code Playgroud)
我得到了一些错误的值 RTy7aSpufwRDWUudgZCwR5Xc7NETd6Imk4YlzvgKTRU=
正确的值是:
sha256/i1RfARNCYn9+K3xmRNTaXG9sVSK6TMgY9l8SDm3MUZ4=
sha256/7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=
sha256/h6801m+z8v3zbgkRHpq6L29Esgfzhj89C1SyUCOQmqU=
Run Code Online (Sandbox Code Playgroud)
我想知道三个值是如何进来的,是的,只有一个是正确的,但是为了验证这些值,我确实运行了下面给出的示例程序:
public class Main {
public static void main(String[] args) throws IOException {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
String hostName = "www.google.com";
CertificatePinner certificatePinner = new CertificatePinner.Builder()
.add(hostName, "sha256/pqrmt")
.build();
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(interceptor)
.certificatePinner(certificatePinner)
.build();
Request request = new Request.Builder()
.url("https://" + hostName)
.build();
client.newCall(request).execute();
}
}
Run Code Online (Sandbox Code Playgroud)
添加错误的密钥散列给我正确的错误日志,使用正确的一个可以让我轻松地进行交流。
openssl x509 -in test.crt -pubkey -noout | openssl rsa -pubin -outform der | \
openssl dgst -sha256 -binary | openssl enc -base64
Run Code Online (Sandbox Code Playgroud)
sha256/i1RfARNCYn9+K3xmRNTaXG9sVSK6TMgY9l8SDm3MUZ4=
此 pin 与访问 www.google.com 时返回的叶证书匹配:
$ openssl s_client -connect www.google.com:443 |\
openssl x509 -pubkey -noout |\
openssl pkey -pubin -outform der |\
openssl dgst -sha256 -binary |\
openssl enc -base64
...
depth=0 ... CN = www.google.com
i1RfARNCYn9+K3xmRNTaXG9sVSK6TMgY9l8SDm3MUZ4=
Run Code Online (Sandbox Code Playgroud)
但是,如果您仔细查看访问 www.google.com 时返回的证书,您会发现它的 CN 为www.google.com. 相反,您在问题中包含的证书的 CN 为*.google.com,即是不同的证书。例如,如果您访问 google.com 而不是 www.google.com,则会返回此证书:
$ openssl s_client -connect google.com:443 |\
openssl x509 -pubkey -noout |\
openssl pkey -pubin -outform der |\
openssl dgst -sha256 -binary |\
openssl enc -base64
...
depth=0 ... CN = *.google.com
RTy7aSpufwRDWUudgZCwR5Xc7NETd6Imk4YlzvgKTRU=
Run Code Online (Sandbox Code Playgroud)
如您所见,您计算出的公钥指纹是正确的。只有您对正确指纹的假设不正确,因为您已针对错误的站点检查了这些指纹。
| 归档时间: |
|
| 查看次数: |
2855 次 |
| 最近记录: |