J'ai regardé quelques exemples mais je n'arrive pas à comprendre pourquoi le ssl ne fonctionne pas. Ma situation :
Tout d'abord, j'ai une application Rails avec passenger, l'application normale fonctionne avec nginx, aucun problème. Je voudrais ajouter le support ssl sur certains chemins (par exemple /admin ou /config). J'ai auto-signé mon certificat car les url seront utilisées par une application Android pour envoyer des données sécurisées au serveur, c'est la seule raison pour laquelle j'ai besoin du support SSL.
D'après ce que j'ai compris, je dois activer HTTP et HTTPS sur nginx et laisser l'application Rails décider si elle doit utiliser HTTP ou HTTPS (corrigez-moi si je me trompe). Alors, à quoi devrait ressembler la configuration de nginx pour permettre à la fois HTTPS et HTTP sur la même adresse IP ? J'ai utilisé les commandes suivantes pour générer mes certificats :
openssl req –new -x509 –keyout private/cakey.pem –out cacert.pem
openssl req –new –out newcert/webserver-cert/pem –keyout private/webserver-key.pem
echo '01' > serial
touch index.txt
openssl ca –cert cacert.pem –keyfile private/cakey.pem –out certs/webserver-cert.pem –in newcerts/webserver-cert.pem
Je ne sais pas si c'est la bonne façon de procéder, toute aide à ce sujet serait la bienvenue :)
Merci !
UPDATE
Voici ma configuration actuelle, lorsque j'utilise https, j'obtiens l'erreur suivante : "Erreur de connexion SSL"
root@event-backend:/opt# cat /opt/nginx/conf/nginx.conf
worker_processes 1;
error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
passenger_root /usr/local/rvm/gems/ruby-1.9.3-p194@rails32/gems/passenger-3.0.12;
passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p194@rails32/ruby;
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 192.168.20.32;
root /opt/bap-backend/public;
location ~ .php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 192.168.20.32:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/www$fastcgi_script_name;
include fastcgi_params;
}
passenger_enabled on;
}
server {
listen 443 ssl;
server_name 192.168.20.32;
root /opt/bap-backend/public;
#SSL options
ssl_certificate /opt/certificate/server.crt;
ssl_certificate_key /opt/certificate/server.key;
location / {
proxy_set_header X-FORWARDED_PROTO $scheme;
}
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
passenger_enabled on;
}
}
Est-ce normal ou est-ce parce que je n'ai rien changé dans mon application Rails ?
LOGS
root@event-backend:/opt# netstat --tcp --listening --programs
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost.localdom:smtp *:* LISTEN 392/sendmail: MTA:
tcp 0 0 *:https *:* LISTEN 8799/nginx
tcp 0 0 localhost.localdo:mysql *:* LISTEN 226/mysqld
tcp 0 0 localhost.lo:submission *:* LISTEN 392/sendmail: MTA:
tcp 0 0 *:www *:* LISTEN 8799/nginx
tcp 0 0 *:ssh *:* LISTEN 213/sshd
tcp6 0 0 [::]:ssh [::]:* LISTEN 213/sshd
root@event-backend:/opt# cat nginx/logs/error.log
2012/05/11 07:44:29 [notice] 1562#0: signal 15 (SIGTERM) received, exiting
2012/05/11 07:44:29 [notice] 1564#0: exiting
2012/05/11 07:44:29 [notice] 1564#0: exit
2012/05/11 07:44:29 [notice] 1562#0: signal 17 (SIGCHLD) received
2012/05/11 07:44:29 [notice] 1562#0: worker process 1564 exited with code 0
2012/05/11 07:44:29 [notice] 1562#0: exit
2012/05/11 07:44:29 [notice] 8756#0: using the "epoll" event method
2012/05/11 07:44:29 [notice] 8756#0: nginx/1.0.15
2012/05/11 07:44:29 [notice] 8756#0: built by gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
2012/05/11 07:44:29 [notice] 8756#0: OS: Linux 2.6.32-6-pve
2012/05/11 07:44:29 [notice] 8756#0: getrlimit(RLIMIT_NOFILE): 1024:1024
2012/05/11 07:44:29 [notice] 8799#0: start worker processes
2012/05/11 07:44:29 [notice] 8799#0: start worker process 8801
root@event-backend:/opt/nginx/sbin# ./nginx -V
nginx version: nginx/1.0.15
built by gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx --with-http_ssl_module --with-http_gzip_static_module --with-cc-opt=-Wno-error --add-module=/usr/local/rvm/gems/ruby-1.9.3-p194@rails32/gems/passenger-3.0.12/ext/nginx --with-http_ssl_module
MISE À JOUR 2
Il y avait un pare-feu qui faisait des trucs bizarres, maintenant je peux utiliser https mais je trouve dans mes logs les erreurs suivantes :
root@event-backend:/opt# cat nginx/logs/error.log
2012/05/11 12:48:15 [info] 14713#0: *229 client closed prematurely connection while SSL handshaking, client: 192.168.20.1, server: 192.168.20.32
2012/05/11 12:48:15 [info] 14713#0: *230 client closed prematurely connection while SSL handshaking, client: 192.168.20.1, server: 192.168.20.32
2012/05/11 12:48:15 [error] 14713#0: *231 directory index of "/opt/bap-backend/public/" is forbidden, client: 192.168.20.1, server: 192.168.20.32, request: "GET / HTTP/1.1", host: "192.168.20.32"