-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implémenter le Certificate Pinning #36
Comments
Les 2 méthodes :
sont déjà exposées à Swift côte iOS dans
L'ajout de certificats racines est relayé au module Le certificat doit être au format DER ou PEM : https://docs.rs/reqwest/latest/reqwest/tls/struct.Certificate.html |
Un article très intéressant sur le certificate pinning sur iOS : https://securevale.blog/articles/deep-dive-into-certificate-pinning-on-ios/ Sur Tchap Android, les fichiers On peut voir leur contenu avec la commande : La crate Rust Pour convertir le format DER en format PEM : Le PEM est un format encodé en Base64 qui le rend stockable dans la structure plist du fichier info.plist. Puis pour générer le hash attendu par |
L'ajout de certificats passe par l'appel de la méthode Cet appel ajoute le certificat dans la propriété Lors de l'appel à la méthode
À la ligne C'est le binding qui manipule le type Attention : fournir plusieurs certificats nécessite d'activer le backend Mais je ne vois pas encore comment appeler la méthode Voir cette issue : seanmonstar/reqwest#2011 |
Actuellement, en ajoutant le certificat PEM issu de Tchap Android, l'application n'arrive pas à se connecter au serveur d'accueil. Le certificat fourni dans Tchap Android Legacy est-il un ROOT Certificate ou un Leaf Certificate ? (@yostyle) -> c'est le root ca de certigna Il faudrait peut-être faire des tests en Rust directement ? C'est peut-être lié au fait que |
Attention, sur Tchap Android Legacy, on n'utilise pas le Certificate Pinning mais du Trust anchor. Et le Certificate Pinning est plus restrictif que le Trusted CA. |
Le Certificate Pinning est habituellement implémenté au niveau du fichier de configuration
Info.plist
de l'application iOS, sous l'entréeAppTransportSecurity
(NSAppTransportSecurity) : https://developer.apple.com/news/?id=g9ejcf8yToutefois, cette prise en compte automatique ne fonctionne qu'avec les frameworks de haut niveau (comme
URLSession
).La couche réseau dans Element X est implémentée au niveau du SDK Rust et se base sur la crate
reqwest
:Cette couche Rust ne doit certainement pas faire appel à
URLSession
mais doit se baser plutôt sur une couche plus bas niveau (type CFNetwork).Hors, les réglages de
AppTransportSecurity
ne fonctionnent pas sur les couches bas niveau tellesNetwork
ouCFNetwork
: https://developer.apple.com/documentation/Security/preventing-insecure-network-connectionsOn ne va donc pas pouvoir se baser dessus pour implémenter automatiquement le certificate pinning dans Tchap X.
Toutefois, le Rust SDK propose 2 méthodes :
disable_built_in_root_certificates
: https://github.com/matrix-org/matrix-rust-sdk/blob/d49d12249a804757ecd97061a9f764e1af6c0f4c/crates/matrix-sdk/src/client/builder/mod.rs#L341add_root_certificates
: https://github.com/matrix-org/matrix-rust-sdk/blob/d49d12249a804757ecd97061a9f764e1af6c0f4c/crates/matrix-sdk/src/client/builder/mod.rs#L332C12-L332C33Ces 2 méthodes doivent nous permettre de réactiver le Certificate Pinning en désactivant les certicats fournis par le système puis en activant uniquement le certificat que Tchap X autorise.
Ces méthodes devront êrte exposées par l'interface
ffi:
du Rust SDK (cela ne semble pas être le cas actuellement).Attention
Les appels Matrix sont gérés par le Rust SDK. Mais les autres appels réseau comme le web (pour accéder à lA FAQ) et les webviews n'interagissent pas avec le Rust SDK. pour ces appels, il faudra donc mettre en place le Certicate Pinning via
AppTransportSecurity
.L'idéal ensuite, serait de pouvoir lire l'entrée
AppTransportSecurity
à l'initialisation du client HTTPS de l'application, pour utiliser le certificat renseigné et l'injecter dans le Rust SDK.TODO
ffi:
du Rust SDKAppTransportSecurity
NB:
La même vérification doit être faite sur Android qui semble présenter le même souci : https://developer.android.com/privacy-and-security/security-ssl (tchapgouv/tchap-x-android#1)
The text was updated successfully, but these errors were encountered: