Ho un ambiente di prova che utilizza Ruby per guidare un server su una connessione https. Poiché le ultime versioni di Ruby rifiutano di connettersi a un server https con un certificato non valido (vedere this earlier question of mine) e vorrei iniziare a utilizzare una versione più recente di Ruby, sto tentando di impostare un certificato valido.Connessione tramite https a un server con un certificato firmato da una CA Ho creato
Ho creato un certificato CA da utilizzare (ci sono più server in fase di test, quindi questo sembra il modo più semplice), e l'ho usato con successo per firmare un nuovo certificato che è stato installato su un server e viene utilizzato. Ho aggiunto il certificato CA all'archivio del browser e questo (il browser) ora si connetterà al server senza reclami. Quindi sono sicuro che i miei certificati siano validi e impostati correttamente.
So che Ruby non utilizza lo stesso negozio del browser. Ho utilizzato il file CA disponibile here per testare la connessione ad altri server (pubblici) (impostato utilizzando il metodo Net::HTTP#ca_file=
) e anche questo funziona.
Quello che non riesco a far funzionare è Ruby che si connette al mio server usando il mio certificato. Ho provato vari modi di puntandolo verso il mio certificato (tra cui aggiungendo il mio certificato nel file linkato sopra) e si dà sempre lo stesso errore:
SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A (OpenSSL::SSL::SSLError)
Che cosa devo fare per convincere Rubino ad accettare il mio certificato e connettersi al mio server?
Il codice che sto usando è:
require 'net/https'
uri = URI.parse("https://hostname/index.html")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = "My CA cert file"
request = Net::HTTP::Get.new(uri.path)
response = http.request(request)
Sto assumendo questo è sbagliato in qualche modo. Quello che voglio sapere è, cosa dovrei fare per usare il mio certificato CA?
Hai detto di eseguire il server anche con Ruby? Potresti per favore postare gli snippet di codice rilevanti per client e server? – emboss
@emboss il server non è Ruby (in realtà è tomcat anche se non credo che importi). Non sono sicuro del codice che vorresti vedere. Sto solo usando la libreria standard https di Ruby. – Jonathan
@Jonathan, incollare il codice client che si sta utilizzando per connettersi al proprio server sarebbe un punto di partenza. –