Comment sécurisez-vous une prise avec SSL dans RUBY lorsque vous devez communiquer sur le plus clair? P>
Je ne peux pas utiliser openssl :: SSL :: SSLSERVER code>
Parce que c'est la responsabilité du client de demander une connexion SSL d'abord p>
Pour mettre une longue histoire courte, je tente de mettre en œuvre RFC3207, où le client envoie le mot-clé "StartTLs", puis une connexion SSL est créée. P>
Ma question est "Comment créer la connexion SSL après que le serveur ait envoyé '220 OK'?" P>
Je sais que je peux utiliser openssl :: ssl :: sslsocket code>
sur le côté client, mais je ne sais pas quoi faire sur le côté serveur p>
Si vous savez faire cela dans une langue autre que Ruby, postez simplement le code et je vais le traduire, je travaille dessus pendant environ 8 heures et j'ai besoin de tout ce que je peux obtenir P>
J'ai demandé à # Ruby-Lang, mais sans être en vain et j'ai essayé d'envelopper des objets de prise en sslsockets sur le serveur et le client en même temps, mais cela ne fonctionne pas non plus p>
En bref, je suis très coincé, j'ai besoin de toute l'aide que je peux obtenir p>
3 Réponses :
J'ai fait de la tête à ce sujet, enregistré pour une utilisation future: p>
Modifier comme vous s'il vous plaît p>
Vous devez définir le champ START_IMMAMMEDYS SSLSERVER sur FALSE afin de démarrer le serveur SSL en mode texte brut. À tout moment (c'est-à-dire lorsque vous recevez la commande StartTLS du client), vous pouvez appeler la méthode d'acceptation de SSLSocket pour initier la poignée de main SSL / TLS. Le client doit bien entendu accepter le protocole :)
Voici un exemple de serveur que j'ai écrit pour tester ceci: p> Je suis sûr que l'affiche originale sait Comment tester des starttls, mais le reste d'entre nous pourrait avoir besoin de ce rappel. Actiellement, je suis normalement en train d'utiliser les utils du paquet GNUTLS (gnoutls-bin à Debian / Ubuntu) pour tester les starttls, car cela me permet de démarrer la poignée de main chaque fois que je veux: P> $ gnutls-cli --starttls --port 9002 --insecure localhost
J'ai séparé l'implémentation d'OpenSSL SSLServer comme référence pour écrire le code que j'utilise aujourd'hui, et il regarde presque identique en dehors de #sync_close, et je lance toujours les erreurs: /
j'ai créé ce Gist pour illustrer comment configurer un serveur TLS minimal. Vous voudrez peut-être laisser des lignes 62-67, c'était pour illustrer une nouvelle fonctionnalité sur le coffre.
Mais autre que cela, c'est un serveur TLS entièrement actif, vous pouvez y construire pour ajouter des fonctionnalités supplémentaires. P>
Vous pouvez également modifier le CN du certificat de serveur de "localhost" à un domaine réel si vous souhaitez l'utiliser sérieusement :) p>
Vous remarquerez peut-être que la plus grande partie du travail est en train de définir. les aspects PKI correctement. La partie de serveur de base est la suivante: p>
Combien de la génération de certificat puis-je décoller? J'envisage de la mettre dans un script pour générer un certificat pendant une année et conserver les certificats du contrôle de la source. Votre échantillon barebone ci-dessus est (à peu près, à la réutilisation de contexte) ce que j'utilise maintenant, et cela provoque occasionnellement des erreurs étranges, et je pense que vous avez déjà vu ces déjà :)