2011-02-18 9 views
4

자체 생성 된 와일드 카드 SSL 인증서을 사용 중입니다. 다음과 같은 경우 문제가 있는지 알고 싶습니다. 그것을 고쳐라. 로컬 호스트에서 실행되는 내 웹 Ruby on Rails 3 애플리케이션 용 인증서입니다.SSL 인증서 사용시 문제 : '인증서 체인에 자체 서명 된 인증서'

"Snow Leopard"1.6.6을 실행하는 Mac OS를 사용하고 있습니다. 나는 다음과 같은 터미널

<my_user_name>$ openssl s_client -connect localhost.com:443 

에서 얻을 입력 : verify error:num=19:self signed certificate in certificate chain :

CONNECTED(00000003) 
depth=1 C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = My Name\Surname 
verify error:num=19:self signed certificate in certificate chain 
verify return:0 
--- 
Certificate chain 
0 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=*localhost.com 
    i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=My Name\Surname 
1 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=My Name\Surname 
    i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=My Name\Surname 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIICJDCCAY0CAQEwDQYJKoZIhvcNAQEEBQAwWTELMAkGA1UEBhMCQVUxEzARBgNV 
BAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 
ZDESMBAGA1UEAwwJU2VyZ2lvIEwuMB4XDTExMDIxODIwMDAwOFoXDTEyMDIxODIw 
MDAwOFowXDELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNV 
BAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEVMBMGA1UEAwwMKnBqdG5hbWUu 
Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDM46dH9rWKy5sNKBwJ7oo 
wytsjw8fFLRskJGE0QqgKpz5ZtYK8yC/kifI4gpWZYVySePmVqHR6+wpv8Ry1KVx 
Bl2qhF6ssLBbc5bvOK4eF2Rx9LNAZ/ndy+0q07DVsnAMMCxhNmegltCG1JZhazCG 
g7elPm2pIQLAQvKlFSJwkQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBADO7XJbOASZM 
Bm/XElq1AuVU1dR6/wkowLOxCn8+KWsUmyIdZj1yL8+83nhhG/yekzOr25n/I0SQ 
zN1aUi3oX5vXlx8vp2xQsnug2BM/InfQxOn+90JjhZYPbCokH9ifzYsNj7fvGg57 
KZ4et2jSfchxFMRqqoPutdOp/gNKw3me 
-----END CERTIFICATE----- 
subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=*localhost.com 
issuer=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=My Name\Surname 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 1944 bytes and written 409 bytes 
--- 
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA 
Server public key is 1024 bit 
Secure Renegotiation IS NOT supported 
Compression: zlib compression 
Expansion: zlib compression 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : DHE-RSA-AES256-SHA 
    Session-ID: 63BE474E62950D542BCBE30F72F80C28851EE23EA15BA34AE3E3E46AB5615505 
    Session-ID-ctx: 
    Master-Key: 9E8A8F7F4E824A2B251D5A28E3A133AC761BA8EDB237073973D2B1AE0AE0A31ADDADA2315F33B443B3F29D382070FC6C 
    Key-Arg : None 
    PSK identity: None 
    PSK identity hint: None 
    TLS session ticket: 
    0000 - 10 b0 f3 4d 96 90 d3 65-22 d4 bf 09 27 8c a0 af ...M...e"...'... 
    0010 - d3 79 5c 9a cf d9 5b e1-3f aa 46 56 55 9b 55 50 .y\...[.?.FVU.UP 
    0020 - 8b 49 99 07 bc 35 e0 bc-e1 1d 4e 61 f0 aa 33 57 .I...5....Na..3W 
    0030 - 1d 37 0b dd 51 ae 81 ea-df 8e 6e 25 ff f7 2b ff .7..Q.....n%..+. 
    0040 - e9 88 79 e4 57 2a b2 f2-61 22 df 86 f0 24 57 a7 ..y.W*..a"...$W. 
    0050 - 06 13 b5 71 47 dc d5 ac-c2 61 89 75 6e 03 45 cc ...qG....a.un.E. 
    0060 - 14 69 0c 72 3a 4a 00 b3-4f d8 8d 44 2d 66 cb 40 .i.r:[email protected] 
    0070 - 80 c8 9b e2 12 9f 0d b4-58 6e a1 c7 bb fe 92 6d ........Xn.....m 
    0080 - b8 b7 b7 f0 dc 1c ab fd-44 a4 25 96 c6 09 09 a1 ........D.%..... 
    0090 - aa ff c0 dc 53 6b 30 13-30 f3 44 f6 78 b1 43 c7 ....Sk0.0.D.x.C. 
    00a0 - ca 88 9d 63 41 d3 c1 a1-af fa 36 e2 9c fd 0e 62 ...cA.....6....b 
    00b0 - c4 44 6b 5c 74 da ff be-a8 98 3f 54 f9 fa 59 15 .Dk\t.....?T..Y. 

    Compression: 1 (zlib compression) 
    Start Time: 1298072476 
    Timeout : 300 (sec) 
    Verify return code: 19 (self signed certificate in certificate chain) 

문제를, 어쩌면, 라인 3에 있습니다. 그게 무슨 뜻이야? 내 인증서가 localhost.com에서 작동합니까?


UPDATE 내 셀프 서명 된 인증서를 받아 브라우저에서

심지어 내가 verify error:num=19:self signed certificate in certificate chain 얻을 내 응용 프로그램에서, (I 명시 적으로 시스템의 개인 인증서 목록에 내 인증서를 추가), 그래서 다음 코드를 사용하여 SSL을 통한 HTTP 요청을 수행합니다.

require 'uri' 
require 'net/https' 

host = "https://<subdomain>.localhost.com" 
path = "https://stackoverflow.com/users/1.json" 

uri = URI.parse("#{host}#{path}") 

http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 

http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
# I think here is necessary to verify connections using 'http.verify_mode = OpenSSL::SSL::VERIFY_PEER': 
# in localhost using that the connection will fault, but in production mode 
# (when I will deploy the application) I think I MUST use 'VERIFY_PEER' 

http.ca_file = File.join(File.dirname("<certificate_folder>/wildcard.certificate/ca.db.certs/"), "01.pem") 

http.start do 
    response = http.get("#{host}#{path}") 
    @test_response = JSON(response.body)["profile"] 
end 

실제로 SSL을 통한 연결은 어떻게됩니까? 'VERIFY_PEER'는 (는) 의미합니까?

+0

을 통해 인트라넷에 액세스 할 수 있습니다 '로컬 호스트'가 아닌 경우에도 유효합니다 왜 호스트 "로컬 호스트. com "?? – Vanwaril

답변

4

SSL은 호스트의 인증서를 검사하여 호스트의 유효성을 확인합니다.

모든 인증서 중 하나입니다

  1. 자체 서명
  2. 다른 인증서에 의해 서명.

다른 인증서로 서명 한 경우 서명 한 인증서를 검사합니다.

이제 인증서가 유효한지 여부를 확인하기 위해 인증서가 시스템에있는 '유효한'인증서 저장소와 일치해야합니다 (예 : Firefox가 자체 저장소를 유지 관리하며 Windows에 자체 상점 등). 계층 구조에서 저장소와 일치하는 일부 인증서와 일치하면 해당 인증서를 유효한 것으로 간주하므로 서명 된 모든 인증서가 유효합니다.

인증서가 자체 서명되어 있고 저장소에 없으면 거부하거나 인증서를 확인할 수 없다고 경고합니다.

인증서가 응용 프로그램을 테스트하기위한 것이거나 매우 사람에게 저장소에 인증서를 추가하도록 요청할 수있는 위치 인 경우에는 괜찮습니다. 그러나 somedomain.com의 프로덕션 사이트로 응용 프로그램을 옮길 계획이라면 해당 도메인에 대한 인증서를 구입해야 할 것입니다.

참고 : 어떤 경우에, 당신은 로컬 호스트에 대해 가지고있는 자체 서명 된 인증서는이 IP

+0

질문이 업데이트되었습니다. – user502052

+0

SSL의 VERIFY_PEER는 SSL을 통해 연결될 때마다 인증서를 검사하고 다른 쪽 끝이 유효한지 확인합니다. 이 기능을 사용하지 않으면 검사가 전혀 수행되지 않습니다. – Vanwaril

+0

localhost에서 'VERIFY_NONE'을 (를) 사용하지만 프로덕션 모드에서는 'VERIFY_PEER'(으)로하는 것이 좋습니다. 따라서 응용 프로그램을 배포 할 때 모든 발생을 변경해야합니다. ... 수동으로? !!! – user502052

2

인증서의 목적은 호스트가 위장 된 것이 아니라 위장 된 호스트임을 증명하는 것입니다. 이렇게하려면 인증서를 요청한 사람이나 조직의 신원을 제대로 확인해야하는 인증 기관에서 인증서를 발급 받아야합니다. 결과적으로 자체 서명 된 인증서는 로컬 호스트 인 경우에도 호스트를 안정적으로 식별하지 못합니다. 따라서 대부분의 응용 프로그램은 인증서 체인에서 자체 서명 된 인증서를 볼 때 유효성 검사 오류를보고합니다. 유일한 예외는 인증서가 시스템의 개인 인증서 목록에 명시 적으로 추가 된 경우입니다.이 경우 유효한 것으로 간주됩니다.

결과적으로 컴퓨터에서 테스트 목적으로 자체 서명 된 인증서를 만든 경우 신뢰할 수있는 목록에 추가 할 수 있습니다. 그렇지 않으면 (공용 호스트에 대한 인증서가 필요한 경우) 인증 기관 중 하나에서 인증서를 구매해야합니다.

+0

질문이 업데이트되었습니다. – user502052