2017-05-29 5 views
2

J'ai un paquet API sur CRAN qui fournit une interface avec un DB de l'ONU (link au site UN), il est construit en utilisant httr, qui utilise le paquet curl. J'ai découvert hier que les fonctions essentielles de mon colis n'effectuaient plus correctement sur les machines Windows, tous échouent avec le message d'erreur:En utilisant ssl_verifypeer = FALSE dans un paquet de CRAN?

Error in curl::curl_fetch_memory(url, handle = handle) : Peer certificate cannot be authenticated with given CA certificates

Ce qui signifie que, fondamentalement, il y a un problème de certificat CA empêchant boucle de terminer la connexion . Après avoir examiné cela un peu, je crois que le site de l'ONU hébergeant la DB est le problème, son certificat SSL est invalide par ssldecoder (voir ce link).

Une solution facile pour contourner ce problème consiste à ajouter le paramètre ssl_verifypeer = FALSE à tous les appels au httr::GET(). Cependant, ce n'est pas une solution idéale pour des raisons de sécurité, car il dit basiquement à curl de faire la connexion indépendamment de la validité du certificat du site.

Ma question est, quel est le consensus sur l'utilisation de ce paramètre dans un paquet CRAN? En gardant à l'esprit que le site Web de l'ONU est (sans doute) sûr?

Répondre

1

Via https://curl.haxx.se/docs/sslcerts.html:

Obtenir un certificat de CA qui peut vérifier le serveur distant et utilisez l'option appropriée pour indiquer ce certificat CA pour la vérification lors de la connexion. Pour libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

Dans les options R curl, c'est capath.

Vous pouvez obtenir des versions récentes de ceux ici https://curl.haxx.se/docs/caextract.html à condition que vous faites confiance au site cURL principal.

cacert.pem === ca-bundle.crt s'il vous arrive de voir des références aux deux/soit.

Si les fichiers CA mis à jour causent toujours le problème, alors vous rendez un mauvais service à l'utilisateur en lui faisant croire qu'il est OK en passant simplement FALSE à vos fonctions.

Je n'ai aucune idée de ce que la perte de données d'intégrité de données de préjudice/manipulation de données causerait des gens. Mais au-delà de cela, un certcd marqué est également un signe pour l'utilisateur de MITM. De toute façon, vous devriez réfléchir à deux fois avant d'être un facilitateur.

+0

Merci pour les commentaires @hrbrmstr. J'ai envoyé un courriel à CRAN pour leur dire ce qui se passe et je leur ai suggéré de prendre le paquet jusqu'à ce que les problèmes puissent être réglés. J'ai également déposé un rapport de bogue sur le site Web de l'ONU Comtrade, en leur donnant une idée de ce que j'ai trouvé et en leur demandant s'ils ont récemment changé leurs certificats SSL. Une dernière question, je suis toujours capable de tirer des données CSV du site avec read.csv, et des données json avec le rjson pkg ... cela signifie-t-il simplement que ces options sont intrinsèquement moins sécurisées que httr/curl (et donc je ne devrait pas compter sur eux)? –

3

Je ne sais pas consensus, mais Hadley writes:

Vous ne devez jamais utiliser ssl.verifypeer = FALSE par défaut, à moins que vous ne voulez pas savoir quand votre sécurité a été compromise.

Cela dit, I have seen packages en utilisant l'option par défaut.

La question est: sans un certificat valide, comment savez-vous que le site Web de l'ONU a pas été compromis?

Je suggère d'indiquer clairement le problème en haut de la documentation du paquet et d'indiquer que c'est la responsabilité de l'utilisateur de définir l'option. Et en espérant que le service d'hébergement trie bientôt son certificat.

+0

@neifws Merci pour la contribution et les liens. En ce qui concerne votre question, je n'avais pas considéré que le site de l'ONU pouvait être compromis. J'aime votre solution potentielle en dernier recours. Merci encore. –

+0

Je ne dis pas que c'est compromis, ni que ce n'est pas le cas. Je suppose que le problème est que si ** c'était le cas, vous ne voudriez pas fournir une option non sécurisée par défaut. Si un utilisateur souhaite procéder, c'est sa décision. – neilfws

+0

Pas si sûr de mettre la charge sur l'utilisateur == une réponse acceptable. – hrbrmstr