web-dev-qa-db-fra.com

Ma connexion JDBC à la base de données utilise-t-elle SSL ou non?

Comment savoir si la connexion JDBC à un serveur SQL est sécurisée (c'est-à-dire utilise SSL) ou non?

Est-ce évident par exemple à partir de l'URL. Tous les pilotes JDBC prennent-ils en charge les connexions SSL au serveur de base de données, ou l'utilisation de SSL dépend-elle uniquement du fournisseur de base de données spécifique?

33
Cratylus

Tous les pilotes jdbc prennent-ils en charge la connexion SSL au serveur DB et l'utilisation de SSL dépend-elle uniquement d'un fournisseur DB spécifique?

La prise en charge de SSL/TLS n'est pas obligatoire dans la spécification JDBC. Vous ne pouvez donc pas vous y attendre dans tous les pilotes.

La configuration SSL sur le serveur de base de données peut être déduite de l'URL JDBC, mais cela n'a pas besoin d'être déterministe. Dans le cas d'Oracle, si vous remarquez que l'URL contient une chaîne de connexion qui indique que le protocole utilisé est TCPS au lieu de TCP, ce qui indique l'utilisation de SSL/TLS. Si vous faites cela pour valider une configuration de sécurité, je vous appellerais bâclée.

Il n'est pas judicieux de vérifier la configuration du client seul pour déterminer si le serveur de base de données accepte les connexions via SSL, en particulier si les connexions non SSL sont interdites. Les mécanismes de vérification de la configuration SSL/TLS varieront d'une base de données à l'autre, mais il y aurait des guides de sécurité appropriés pour configurer la base de données dans chaque cas.

Cependant, si vous souhaitez effectuer un test rapide pour vérifier si la connectivité est via SSl/TLS, tout ce que vous devez savoir est que les connexions sécurisées SSL/TLS sont initiées avec une poignée de main. Si vous n'en voyez pas, votre pilote n'utilise pas SSL/TLS. Vous devrez renifler le trafic réseau pour cela (assurez-vous que vous avez l'autorisation de le faire). Bien sûr, il faudrait plus de temps pour établir le cas si un pool de connexions était utilisé, car les connexions physiques dans le pool pourraient être réutilisées à maintes reprises (sans que de nouvelles connexions soient configurées). De même, vous pourriez également trouver nmap utile, mais je ne l'ai jamais utilisé à cette fin.

21
Vineet Reynolds
6
Swaranga Sarma

À mon avis, une façon rapide, sécurisée et neutre vis-à-vis des fournisseurs d'assurer une connexion SSL entre votre client et votre serveur consiste à utiliser s-tunnel .

s-tunnel (parfois aussi appelé "stunnel") vous donne beaucoup de flexibilité, comme l'authentification mutuelle, etc., et permet toujours aux applications installées sur le serveur DB de communiquer avec lui via une connexion non SSL (SQL Server par exemple autorise les connexions dans trois modes (SSL OFF, SSL en option ou SSL uniquement).

En utilisant s-tunnel, votre connexion serait acheminée quelque chose comme ceci:

jdbc -> local s-tunnel port -> server's s-tunnel port -> server's database port.

En définissant stunnel avec les règles de pare-feu pertinentes, vous pouvez être sûr que les connexions à distance à la base de données utilisent SSL.

4
ifx