ruby-on-rails – 使用SSL证书时出现问题:’证书链中的自签名证
我正在使用自生成的通配符SSL证书,我想知道以下是否是一个问题,如果是,我可以做些什么来解决这个问题.证书适用于在localhost上运行的我的Web
Ruby on Rails 3应用程序.
我正在使用运行“Snow Leopard”1.6.6的Mac OS.在终端输入 <my_user_name>$openssl s_client -connect localhost.com:443 我得到以下内容: CONNECTED(00000003) depth=1 C = AU,ST = Some-State,O = Internet Widgits Pty Ltd,CN = My NameSurname 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 NameSurname 1 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=My NameSurname i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=My NameSurname --- 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 NameSurname --- 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:J..O..D-f.@ 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 .Dkt.....?T..Y. Compression: 1 (zlib compression) Start Time: 1298072476 Timeout : 300 (sec) Verify return code: 19 (self signed certificate in certificate chain) 问题可能在第3行:验证错误:num = 19:证书链中的自签名证书.那意味着什么?我的证书是否适用于localhost.com? UPDATE 在浏览器中,我接受了我的sel签名证书(我明确地将我的证书添加到系统中的私有证书列表中),因此,即使我得到验证错误:num = 19:证书链中的自签名证书和我在我的应用程序中使用以下代码通过SSL发出HTTP请求 require 'uri' require 'net/https' host = "https://<subdomain>.localhost.com" path = "/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’意味着什么? 解决方法
SSL通过检查主机的证书来验证主机的有效性.
每个证书都是: >自签名 如果它由另一个证书签名,它将检查签署它的证书. 现在,在某些时候,为了验证证书是否有效,它必须将该证书与它在系统上的“有效”证书存储相匹配(例如:Firefox维护自己的商店,Windows有自己的商店,等等.).如果它与层次结构中的某个证书匹配商店,则它会将该证书视为有效,因此由其签名的所有证书都是有效的. 但是,如果证书是自签名的并且不在商店中,那么它将拒绝它,或者警告您它无法验证证书. 如果证书是为您测试一个应用程序,或者是为了您可以要求人们将证书添加到他们的商店的非常有限的部署,这没关系.但是,如果您计划将应用程序移至somedomain.com上的生产站点,则可能需要为该域购买证书. 注意:在任何一种情况下,您对localhost的自签名证书仅对“localhost”有效,即使通过IP在Intranet上访问也是如此 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |