2014-01-29 114 views
4

我正在使用openssl s_client -showcerts -connect test.abc.com:443 -state -debug來檢查服務器證書。服務器正在使用nginx。但是,當我要求上面的openssl顯示服務器證書爲* .xyz.com。我想知道openssl在哪裏獲得這個作爲服務器證書。操作系統是Linux。在/ etc/pki/tls中檢入,但openssl作爲服務器證書讀取的證書不在那裏。而nginx配置指向abc.com的正確證書。此外,如果我使用瀏覽器訪問正確的證書顯示。這隻會在openssl中發生。 。:(Openssl在瀏覽器正確顯示時顯示不同的服務器證書

+0

您能否提供瀏覽器中使用的URL和OpenSSL命令中使用的服務器?另外,您使用的是哪種版本的OpenSSL(openssl-1.0.2添加了名稱檢查和驗證,並且可能存在某些已被排除在外的情況)。 – jww

+0

https://apitest.ethormapp.com和OpenSSL的版本是OpenSSL 1.0.1e-fips 2013年2月11日 – dmn

回答

4

服務器發出一個永久重定向到ethornetworks.com要看到它,第一個問題您s_client命令:

$ openssl s_client -CAfile AddTrustExternalCARoot.crt -connect apitest.ethormapp.com:443 
CONNECTED(00000003) 
depth=4 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root 
verify return:1 
depth=3 C = US, ST = UT, L = Salt Lake City, O = The USERTRUST Network, OU = http://www.usertrust.com, CN = UTN - DATACorp SGC 
verify return:1 
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO Certification Authority 
verify return:1 
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = EssentialSSL CA 
verify return:1 
depth=0 OU = Domain Control Validated, OU = EssentialSSL Wildcard, CN = *.ethornetworks.com 
verify return:1 
... 

在最底層,你得到的結果驗證後,進入GET/HTTP/1.0命令按RETURN兩次:

... 
    Start Time: 1390985154 
    Timeout : 300 (sec) 
    Verify return code: 0 (ok) 
--- 
GET/HTTP/1.0 

HTTP/1.1 301 Moved Permanently 
Server: nginx/1.4.4 
Date: Wed, 29 Jan 2014 08:46:01 GMT 
Content-Type: text/html 
Content-Length: 184 
Connection: close 
Location: https://www.ethornetworks.com/ 

<html> 
<head><title>301 Moved Permanently</title></head> 
<body bgcolor="white"> 
<center><h1>301 Moved Permanently</h1></center> 
<hr><center>nginx/1.4.4</center> 
</body> 
</html> 
closed 
$ 

如果你跟隨重定向,那麼你會得到預期的結果:

$ openssl s_client -CAfile AddTrustExternalCARoot.crt -connect www.ethornetworks.com:443 
CONNECTED(00000003) 
depth=4 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root 
verify error:num=19:self signed certificate in certificate chain 
verify return:0 
--- 
Certificate chain 
0 s:/OU=Domain Control Validated/OU=EssentialSSL Wildcard/CN=*.ethornetworks.com 
    i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=EssentialSSL CA 
1 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=EssentialSSL CA 
    i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO Certification Authority 
... 

最後,您可以使用AddTrust External CA Root確保鏈按預期進行驗證。沒有它和-CAfile選項,s_client將報告19 (self signed certificate in certificate chain)

+0

謝謝,但問題是爲什麼我通過Web瀏覽器訪問時獲得正確的證書和URL? – dmn

+0

您的瀏覽器正在重定向,而OpenSSL的's_client'沒有。 – jww

3

有一個SNI問題與OpenSSL的,請嘗試使用以下命令:

openssl s_client -showcerts -connect www.example.com:443 -servername www.example.com </dev/null

加入根據this article -servername應該把它清除掉。

相關問題