.. _reference-auth-methods:

###########################
Méthodes d'authentification
###########################

========================
Authentification interne
========================

Le terme "authentification interne" correspond aux méthodes d'authentification
utilisée pour authentifier un agent externe sur Waarp Transfer dans l'optique
d'effectuer un transfert. Cela concerne à la fois les :term:`partenaires distants<partenaire>`,
lorsque Waarp Transfer agit comme client; et les :term:`comptes locaux<compte local>`,
lorsque Waarp Transfer agit comme serveur.

À l'heure actuelle, les formes d'authentification interne supportées dans Waarp
Transfer sont :

+--------------------+---------------------------+----------------------+---------------------------+----------------------------+
| Nom d'usage        | Nom du type               | Protocoles supportés | Valeur primaire attendue  | Valeur secondaire attendue |
+====================+===========================+======================+===========================+============================+
| Mot de passe       | *password*                | R66, R66-TLS         | Un mot de passe           | N/A                        |
+--------------------+---------------------------+----------------------+---------------------------+----------------------------+
| Certificat TLS de  | *trusted_tls_certificate* | R66-TLS              | Un certificat TLS de      | N/A                        |
| Confiance          |                           |                      | confiance                 |                            |
+--------------------+---------------------------+----------------------+---------------------------+----------------------------+
| Certificat R66     | *r66_legacy_certificate*  | R66-TLS              | N/A                       | N/A                        |
| "legacy"           |                           |                      |                           |                            |
+--------------------+---------------------------+----------------------+---------------------------+----------------------------+

Autorité d'authentification
---------------------------

En plus des formes d'authentification spécifiées ci-dessus, Waarp Transfer intègre
également le concept d'*autorité d'authentification*. Une autorité d'authentification
représente un tiers de confiance auquel Waarp Transfer peut déléguer la vérification
de l'authentification. À l'heure actuelle, cela ne concerne que l'authentification
via certificat (TLS ou SSH).

En effet, lorsqu'un partenaire présente un certificat, pour être considéré comme
valide, le certificat doit soit avoir été renseigné à l'avance (en tant que
*trusted_tls_certificate*), soit avoir été signé par une autorité de confiance.
Par défaut, Waarp Transfer liste d'autorité de confiance fournie par l'OS
sur lequel elle est installée.

Cependant, Waarp Transfer maintient également sa propre liste d'autorité de confiance
(ou autorités d'authentification). Ainsi, tout certificat signé par une autorité
dans cette liste sera considéré comme "de confiance", et n'aura donc pas besoin
d'être renseigné à l'avance dans Waarp Transfer. Par défaut, tous les certificats
signé par ces autorités sont acceptés. Il est cependant possible de restreindre
les hôtes qu'une autorité est habilitée à certifier. Cela permet de limiter le
champ d'action d'une autorité en limitant la confiance accordée à celle-ci à
certains hôtes uniquement.

Pour l'heure, Waarp Transfer supporte les type d'autorités suivants :

+-------------------------------+----------------------+----------------------+-----------------------------------+
| Nom d'usage                   | Nom du type          | Protocoles supportés | Valeur d'identité publique        |
+===============================+======================+======================+===================================+
| Autorité de certification TLS | *tls_authority*      | R66-TLS              | Le certificat TLS de l'autorité   |
+-------------------------------+----------------------+----------------------+-----------------------------------+

========================
Authentification externe
========================

Le terme "authentification externe" correspond aux méthodes d'authentification
utilisée par Waarp Transfer pour s'authentifier auprès d'un agent externe dans
l'optique d'effectuer un transfert. Cela concerne à la fois les :term:`serveur locaux<serveur>`,
lorsque Waarp  Transfer agit comme serveur; et les :term:`comptes distants<compte distant>`,
lorsque Waarp Transfer agit comme client.

À l'heure actuelle, les formes d'authentification externe supportées dans Waarp
Transfer sont :

+----------------+--------------------------+----------------------+--------------------------+----------------------------+
| Nom d'usage    | Nom du type              | Protocoles supportés | Valeur primaire attendue | Valeur secondaire attendue |
+================+==========================+======================+==========================+============================+
| Mot de passe   | *password*               | R66, R66-TLS         | Un mot de passe          | N/A                        |
+----------------+--------------------------+----------------------+--------------------------+----------------------------+
| Certificat TLS | *tls_certificate*        | R66-TLS              | Un certificat TLS        | Une clé privée             |
+----------------+--------------------------+----------------------+--------------------------+----------------------------+
| Certificat R66 | *r66_legacy_certificate* | R66-TLS              | N/A                      | N/A                        |
| "legacy"       |                          |                      |                          |                            |
+----------------+--------------------------+----------------------+--------------------------+----------------------------+

=======================
Explications détaillées
=======================

Certificat R66 "legacy"
-----------------------

L'application Java Waarp-R66 Server était (et est toujours) livrée avec un
certificat de test déjà inséré dans son *keystore*. Pour des raisons de praticité,
et en raison de la difficulté requise pour insérer de nouveaux certificats dans
les *keystore* Java, accepte ce certificat lors des handshake TLS; et ce, malgré
le fait que ce certificat n'est plus valide depuis 2015.

La conséquence de tous ces éléments, est que ce certificat de test s'est retrouvé
à être utilisé en production par un certains nombre d'utilisateurs, et ce, malgré
le fait qu'il n'avait pas du tout été prévu pour. Devant cet état de fait, nous
avons donc pris la décision de continuer de permettre l'utilisation de ce
certificat "legacy" dans Waarp Transfer afin de maintenir la compatibilité entre
les deux applications.

Cependant, en raison des problèmes de sécurité posés par ce choix,

Certificats TLS
---------------

Lors d'un transferts, il est possible (pour les protocoles le supportant) de
s'authentifier via l'échange de certificats TLS. Le parti souhaitant s'authentifier
(que ce soit un client ou un serveur) envoie son certificat à son partenaire, et
celui-ci vérifie que le certificat appartienne bien à l'agent souhaitant
s'authentifier.

Ainsi, pour que Waarp Transfer puisse s'authentifier via ce mécanisme, elle doit
donc posséder un certificat TLS à envoyer, ainsi que la clé privée associée à ce
certificat (pour pouvoir chiffrer les messages). Il s'agit donc de l'authentification
de type `tls_certificate`.

À l'inverse, pour qu'un tier puisse s'authentifier après de Waarp Transfer via cette
méthode, il faut que Waarp Transfer puisse vérifier le certificat qui lui est envoyé.
Il y a 3 cas de figure possible dans ce cas:

- Si le certificat est auto-signé, alors il doit être préalablement attaché à
  l'entité représentant le tiers (compte ou partenaire) pour être considéré
  "de confiance" (*trusted_tls_certificate*).
- Si le certificat a été signé par une autorité publique, connue du système
  d'exploitation, alors aucune action préalable n'est requise. Le certificat
  pourra être vérifié par Waarp Transfer normalement.
- Si le certificat a été signé par une autorité privée, alors cette autorité
  doit être renseignée au préalable avec son certificat. Une fois cela fait, tous
  les certificats tiers signés par cette autorité pourront être utilisés.

