2017-08-14 28 views
0

私は公開鍵証明書からsha256を読み取ろうとしています。証明書は以下のとおりです。公開鍵のsha256ハッシュ

私はSHA256ハッシュを読み取るために、次のコマンドを実行していますが、それは正しい結果を与えていません。

openssl x509 -in test.crt -pubkey -noout | openssl rsa -pubin -outform der | \ 
    openssl dgst -sha256 -binary | openssl enc -base64 

私は正しい値であるいくつかの誤った値にRTy7aSpufwRDWUudgZCwR5Xc7NETd6Imk4YlzvgKTRU=

を取得しています:

sha256/i1RfARNCYn9+K3xmRNTaXG9sVSK6TMgY9l8SDm3MUZ4= 
sha256/7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y= 
sha256/h6801m+z8v3zbgkRHpq6L29Esgfzhj89C1SyUCOQmqU= 

私は3つの値がどのように入ってきたのか疑問に思っています。ただ1つしか正しくありませんが、これらの値を検証するために、以下のサンプルプログラムを実行します:

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(); 

    } 
} 

誤ったキーハッシュを追加すると、エラーログに適切なものが表示され、適切なものを使用すると簡単に通信できます。


-----BEGIN CERTIFICATE----- 
MIIISDCCBzCgAwIBAgIILbxyxVw1oQAwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE 
BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl 
cm5ldCBBdXRob3JpdHkgRzIwHhcNMTcwODAyMTk0NTM5WhcNMTcxMDI1MTkyMzAw 
WjBmMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN 
TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEVMBMGA1UEAwwMKi5n 
b29nbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvqjgh7NP 
S0DNdmqg94u9ecHsxtCCNH5K7RQDbT7stPZaftCBuCXEDbhmqP44ne7kKkKyHqVx 
OxzDyMrvMly/qDvd17X33kXjEdte3YOWTENQ7R//LIQ2qwxOCd7LcDhRLnbhV61k 
yDJIPzjM79BX8b0u9+e2KAYfhYFANB+iZrk0/sLXmlv+T+E1bm4D19H55BstEPM8 
SOTUj0cntYaN+5Rcy1s9p5CjWb1Sy/JXyBv+QLkrbj2JyQ+KlG2Fil4ue3ooF2iA 
LZM+k2OgCizz5Kh6za1oKkL08/wJCaqHQJMhxX1ajXW93DwyojOqt40+6tF43rEU 
Uxy87Joi+ZZNOQIDAQABo4IFFTCCBREwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG 
AQUFBwMCMIID4QYDVR0RBIID2DCCA9SCDCouZ29vZ2xlLmNvbYINKi5hbmRyb2lk 
LmNvbYIWKi5hcHBlbmdpbmUuZ29vZ2xlLmNvbYISKi5jbG91ZC5nb29nbGUuY29t 
ghQqLmRiODMzOTUzLmdvb2dsZS5jboIGKi5nLmNvgg4qLmdjcC5ndnQyLmNvbYIW 
Ki5nb29nbGUtYW5hbHl0aWNzLmNvbYILKi5nb29nbGUuY2GCCyouZ29vZ2xlLmNs 
gg4qLmdvb2dsZS5jby5pboIOKi5nb29nbGUuY28uanCCDiouZ29vZ2xlLmNvLnVr 
gg8qLmdvb2dsZS5jb20uYXKCDyouZ29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29t 
LmJygg8qLmdvb2dsZS5jb20uY2+CDyouZ29vZ2xlLmNvbS5teIIPKi5nb29nbGUu 
Y29tLnRygg8qLmdvb2dsZS5jb20udm6CCyouZ29vZ2xlLmRlggsqLmdvb2dsZS5l 
c4ILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmh1ggsqLmdvb2dsZS5pdIILKi5nb29n 
bGUubmyCCyouZ29vZ2xlLnBsggsqLmdvb2dsZS5wdIISKi5nb29nbGVhZGFwaXMu 
Y29tgg8qLmdvb2dsZWFwaXMuY26CFCouZ29vZ2xlY29tbWVyY2UuY29tghEqLmdv 
b2dsZXZpZGVvLmNvbYIMKi5nc3RhdGljLmNugg0qLmdzdGF0aWMuY29tggoqLmd2 
dDEuY29tggoqLmd2dDIuY29tghQqLm1ldHJpYy5nc3RhdGljLmNvbYIMKi51cmNo 
aW4uY29tghAqLnVybC5nb29nbGUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29t 
gg0qLnlvdXR1YmUuY29tghYqLnlvdXR1YmVlZHVjYXRpb24uY29tggcqLnl0LmJl 
ggsqLnl0aW1nLmNvbYIaYW5kcm9pZC5jbGllbnRzLmdvb2dsZS5jb22CC2FuZHJv 
aWQuY29tghtkZXZlbG9wZXIuYW5kcm9pZC5nb29nbGUuY26CHGRldmVsb3BlcnMu 
YW5kcm9pZC5nb29nbGUuY26CBGcuY2+CBmdvby5nbIIUZ29vZ2xlLWFuYWx5dGlj 
cy5jb22CCmdvb2dsZS5jb22CEmdvb2dsZWNvbW1lcmNlLmNvbYIYc291cmNlLmFu 
ZHJvaWQuZ29vZ2xlLmNuggp1cmNoaW4uY29tggp3d3cuZ29vLmdsggh5b3V0dS5i 
ZYILeW91dHViZS5jb22CFHlvdXR1YmVlZHVjYXRpb24uY29tggV5dC5iZTBoBggr 
BgEFBQcBAQRcMFowKwYIKwYBBQUHMAKGH2h0dHA6Ly9wa2kuZ29vZ2xlLmNvbS9H 
SUFHMi5jcnQwKwYIKwYBBQUHMAGGH2h0dHA6Ly9jbGllbnRzMS5nb29nbGUuY29t 
L29jc3AwHQYDVR0OBBYEFJsK+1wBuADqH695FkUxvBBxBD13MAwGA1UdEwEB/wQC 
MAAwHwYDVR0jBBgwFoAUSt0GFhu89mi1dvWBtrtiGrpagS8wIQYDVR0gBBowGDAM 
BgorBgEEAdZ5AgUBMAgGBmeBDAECAjAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8v 
cGtpLmdvb2dsZS5jb20vR0lBRzIuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQCWfamc 
vElR0WkzwdaofPD66PsmqihYbgMAEOJBtt4isDLcVqG0tE8xwAYZO+EksklR6nXq 
Pi8021W/qgh2XDmyGajc/psjSBdfAi2bw/kIMcXpQsJSR33n0kLJe4/5z5YwSJEt 
M7f6DKlBzxalGrHc2rnkOw4xZEKYZ+nJQ5E3Lms0NKHFPxj3c5QvUYfiWhC4lY1m 
RZRPIDQc9Bmcu+gJseRGYd8g+USo0829CMq42KaQM7nshxmwexXPv9ic9nV6f+Qi 
nw1hL6RdI3+yHRSZCBPnlfpQfLLJatJmpwddP2ibT56zDDT4BQsP4/QeAbEOJ+Bp 
0nJ0S+1OpCbjQXYL 
-----END CERTIFICATE----- 
+2

証明書には公開鍵が1つしかありません。あなたは3つの「正しい」値をどこから取得していますか? –

+0

HI Robbey、より多くのコードを追加しました。これらのハッシュが生成され、生成されたハッシュが正しいことをどのように検証しているかを見てください。 – sector11

+0

値を計算する方法は正しいと思われ、[Mozillaによって文書化された](https://developer.mozilla.org/en-US/docs/Web/HTTP/Public_Key_Pinning)と一致します。正しいものと考える価値が本当に正しいと思います。特に、これらの3つの値のどれが正しいですか? –

答えて

3

SHA256/i1RfARNCYn9 + K3xmRNTaXG9sVSK6TMgY9l8SDm3MUZ4 =

このピンは、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= 

しかし、あなたの場合www.google.comにアクセスしたときに返された証明書を詳しく見ることができますCNのwww.google.comです。あなたの質問に含まれている証明書は、*.google.comのCNを持っています。つまり、別の証明書です。あなたが見ることができるように

$ 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= 

は、あなたが計算されていた公開鍵の指紋が正しいものだった:あなたはwww.google.comのではなく、google.comにアクセスした場合、この証明書は、たとえば返されます。誤ったサイトに対してこれらをチェックしたため、正確な指紋に関するあなたの前提は正しくありません。

+0

詳細な回答ありがとうございます。子サブドメインのすべてのアクセスに対してルート証明書を固定することをお勧めしますか? – sector11

+0

@ sector11:コメントに新しい質問をしないでください(フォローアップの場合でも)誰も新しい質問と回答がそこに現れるとは期待しないからです。代わりに、新しい質問をしてください。それ以外に、これはsecurity.stackexchange.comでよく聞かれるかもしれませんが、まずこのトピックに関する既存の質問と回答を確認してください。 –

+0

問題はありません。 – sector11