Les scripts se sont rompus après la mise à niveau de LWP "vérification du certificat a échoué"
J'ai beaucoup de scripts, la plupart d'entre eux, basée autour de WWW::Mechanize
qui raclent les données de divers matériel qui est accessible via HTTPs. Après la mise à niveau de la plupart de mes perl installation et de ses modules, tous les scripts à l'aide de HTTPS://cassé en raison de "certificate verify failed"
C'est une conséquence du fait que les versions plus récentes de LWP fait un bon de vérifier sur le certificat et dies
si quelque chose ne correspond pas.
Dans mon cas, l'échec de l'authentification par certificat est prévue en raison des circonstances, j'ai donc besoin de trouver un moyen de proprement de contourner cette case.
source d'informationauteur Jarmund
Vous devez vous connecter pour publier un commentaire.
Dire que je veux vous dire quelque chose, et je ne veux pas que quelqu'un d'autre le sache. Nous aimerions organiser un mot de passe, et je voudrais l'utiliser pour chiffrer le message, alors je vais vous envoyer le message.
Que faire si je n'ai pas assurez-vous que la personne à qui j'ai donné le mot de passe et le message chiffré était vous? Ensuite n'importe quel nombre de personnes pourraient simplement se faire passer pour vous et le chiffrement serait pour rien. Tel était l'état de LWP de la prise en charge de HTTPS jusqu'à récemment.
Maintenant, LWP fait des vérifications à qui il parle, sauf si vous demandez LWP à se comporter comme il l'a fait une fois. Vous pouvez le faire en utilisant:
Si vous voulez affecter l'ensemble de LWP::UserAgent instances dans votre script sans spécifier l'option tous sur la place, vous pouvez ajouter les éléments suivants à votre script
Ou vous pouvez lancer votre script comme suit:
Enfin, si vous voulez LWP pour toujours être dangereux, vous pouvez ajouter les éléments suivants à votre script de connexion:
Cependant, je recommande aucune de ce qui précède. La bien meilleure option serait de fournir le certificat de l'hôte à qui vous communiquez. (C'est l'équivalent de l'ajout d'une exception dans Firefox, si vous savez ce que je veux dire.) Voir la la documentation pour
$ua->ssl_opts
.Pour moi, à l'aide de:
Donné
À l'aide de ceci n'est pas de donner des avertissements:
Au début, j'ai ajouté mon code avec:
...mais comme c'est sous-optimal (car elle affecte l'ensemble de la session de connexion, principalement).
Edit: Aussi, l'exportation de cette façon ne fait rien, comme je l'ai fingerfudged ma logique. Voir les commentaires ci-dessous.
J'ai ensuite changé d'ajouter le code avec:
Et après cela, seuls les scripts qui doivent contourner le contrôle n'est donc, dans un état propre et simple.
@ikegami fait un bon argument pour expliquer pourquoi vous ne voulez pas désactiver SSL nom d'hôte de vérification, mais ne fait pas directement mention comment l'éviter.
Si vous parlez à un système public avec un CA-certificat signé, vous avez besoin de point de LWP pour la distribution de votre certificat racine de collection. En vertu d'un système à base de Debian (Ubuntu, etc.), ceci est gardé sous
/etc/ssl/certs/
.Si vous parlez à votre propre serveur avec un certificat auto-signé, vous pouvez enregistrer une copie de ce certificat sur le client, et le point de votre script à ce fichier en particulier.
Vous pouvez définir ces dans l'environnement avant l'exécution de votre script (par exemple, les exporter à partir de votre shell), ou vous pouvez appliquer les paramètres directement à votre Client de l'objet. Voir la LWP::UserAgent de la documentation pour plus de détails; la recherche pour
ssl_opts
(environ à mi-chemin en bas de la page).