Wiele osób tak naprawdę nie rozumie GPGME i prawdopodobnie nie pomaga to, że istniejąca dokumentacja to w zasadzie napisany wówczas komentarz do kodu. Pozwoli to jednak na pełny lub prawie pełny programowy dostęp do całego pakietu GNU Privacy Guard i ma również umożliwiać dostęp do rzeczy takich jak libassuan, gpg-agent i różnych innych komponentów. Dlatego domyślnie zawiera także implementację S / MIME, której prawie nikt poza kilkoma firmami głośno wykrzykiwał pod koniec lat 90.
Obecnie GPGME zawiera około 500 oddzielnych funkcji lub więcej i zdecydowanie obejmuje prawie wszystko, co można zrobić z GPG w wierszu poleceń. Zawiera jednak również relikty poprzednich wyborów projektowych, które następnie zostały uznane za niewłaściwe. Na przykład jest to interfejs API z dużymi fragmentami GTK 2. Oczywiście to musi się skończyć (i będzie, gdy czas na to pozwoli). Innym problemem, jaki ma obecnie, być może największą przeszkodą w adopcji jest to, że gdy ktoś mówi „API”, większość programistów nie od razu myśli o plikach nagłówkowych C, które można by skompilować z własnym kodem w celu uzyskania dostępu do tego; spójrzmy prawdzie w oczy, w dzisiejszych czasach większość ludzi myśli o czymś, co jest RESTful lub przynajmniej pozwólmy im wchodzić w interakcje z danymi w formacie JSON. GPGME jest tak daleko, jak to ” jest możliwe do zdobycia. Zauważ, że chociaż powinno być możliwe, aby gra była ładna z JSON, nigdy nie może być RESTOWANA, ponieważ klawisze edycji nie mogą. Plus zarządzanie kluczami przez Internet wymaga jedynie kłopotów.
Istnieje również wiele nieudokumentowanych funkcji i aspektów tego, że nawet osoby pracujące z oprogramowaniem od momentu jego powstania mogą nadal być zaskoczone niektórymi rzeczami. Na przykład format XML dla danych kluczy, które zawierały wszystko oprócz formalnego schematu (dopóki nie został wygenerowany kilka miesięcy temu).
Z drugiej strony, dla wszystkich dobrych rzeczy, które robi Mutt, robi też pewne dość szokujące rzeczy. Na przykład, niezależnie od tego, czy używany jest GPGME, Mutt nie powinien mieć żadnego powodu, aby buforować hasła; w obu przypadkach należy go przekazać GPG (z lub bez gpg-agent). Podobnie powinno być honorowanie parametrów konfiguracyjnych w ~/.gnupg/gpg.conf
pliku (i innych w tym katalogu). Jasne, ustawienie alternatywnego identyfikatora klucza dla różnych kont w celu zmiany sposobu wywoływania poleceń, a nawet możliwość określenia alternatywnych plików konfiguracji lub całych katalogów (np.gpg --homedir ~/.gnupg-work/gpg.conf
). Jednak w obecnej sytuacji Mutt marnuje czas na rozwiązywanie problemów, które zostały już rozwiązane przez program, z którym współpracuje, takie jak hasło lub zarządzanie kluczami, ale nie pozwala na dostęp do normalnych funkcji GPG, z których wiele jest fantastycznych dla poczty e-mail jak użycie linii grupy dla wielu odbiorców lub w celu zastąpienia wyboru klucza dla konkretnych odbiorców (ponieważ zawsze jest jeden facet, który wciąż traci swój tajny klucz lub zapomina hasło, a teraz masz 15 kluczy publicznych o tym samym adresie co UID i domyślnym zachowaniem jest wybranie pierwszego dopasowania, które najprawdopodobniej nie jest poprawne). Emacs jest tam trochę lepszy, ale nawet nie odbiera gpg.conf
pliku, który zwykle automatycznie odpowiada na pytania, o które chce zapytać.
Teraz, jeśli chodzi o coś bardziej użytecznego i stycznie powiązanego, GPGME zawiera kolejną ciekawą, nieudokumentowaną rzecz o nazwie gpgme-tool. Jest to podstawowy interfejs GPGME, który będzie działał na gnieździe UNIX (i oczywiście możesz użyć ncat lub czegoś innego, aby ustawić go na porcie sieciowym, jeśli chcesz). Chociaż nie jest to udokumentowane, jest dość oczywiste, jeśli uruchomisz go i wejdziesz w interakcję z nim przez chwilę i zaczniesz od polecenia help. Alternatywnie działa to całkiem dobrze:
echo help | gpgme-tool > gpgme-tool-cheatsheet.txt
Z przyjemnością zrobi wszystkie podstawy (szyfrowanie, deszyfrowanie, podpisywanie, weryfikowanie, zmienianie haseł, generowanie kluczy, listy kluczy, listy tajnych kluczy, wyszukiwanie określonych kluczy lub wybieranie ich itp.). Jeśli chcesz zobaczyć „ukryty” format XML, spróbuj tego:
echo "KEYLIST --secret-only" | gpgme-tool > secret-key-list.xml
To nie wyeksportuje tajnych kluczy, wystarczy je wymienić i dane o nich. Ponadto wyeksportuje z pewnym cruft formatu wyjściowego, który trzeba będzie odfiltrować, zanim cokolwiek naprawdę rozpozna go jako XML (usuń górny wiersz, pierwsze dwa znaki każdego następnego wiersza i% 0A z końca każdego wiersza ). W każdym razie gpgme-tool może lepiej zrozumieć, co GPGME może naprawdę zrobić. Powiązania PyME Python dla GPGME, na przykład, próbują automatycznie dopasować funkcje GPGME (i zwykle osiągają to bez problemu); aktualna lista funkcji w pyme.core.pygpgme wynosi 534. Porównaj to z wierszem poleceń, a GPG 1.4.20 ma 322 opcje, podczas gdy 2.1.11 ma 347 (pominąłem 2.0, więc nie mogę sprawdzić, ale powinien być gdzieś pomiędzy tymi dwoma).
Podobnie jak w przypadku poprzedniej odpowiedzi dotyczącej dopasowania kluczowych poleceń, powinny one zależeć wyłącznie od opcji konfiguracji i tego, czy Mutt „pozwala” na pełny dostęp do GPG, czy nie. Obecnie używam Mutt z GPGME i dwie wspomniane funkcje (klucz poczty i klucze wyodrębniania) są w porządku, chociaż Mutt ma problem z rozpoznaniem PGP / treści w wierszu, jeśli przypisał lub odebrał typ tekstu / zwykłej treści z gdzieś. Kiedy tak się dzieje, wtedy tak, zwykle konieczne jest przejście na Emacsa lub coś takiego. Mimo to wydaje się, że jest to problem ze sposobem, w jaki Mutt sprawdza, czy treść jest rzeczywiście tylko tekstem, lub w jaki sposób sprawdza zawartość w formacie OpenPGP. Chociaż nie chciałbym nic lepszego, niż powiedzieć, że wszyscy powinniśmy używać PGP / MIME (i powinniśmy być),
Zasadniczo wygląda na to, że Mutt polega wyłącznie na tym, że wiadomość jest wieloczęściową MIME z jedną lub więcej częściami zawierającymi klucz, podpisy i / lub zaszyfrowaną treść, aby mogła cokolwiek zrobić. Nie tylko przeszukuje zwykły e-mail w poszukiwaniu treści, które pasują, ale to nie wina GPG ani GPGME. Rozwiązaniem jest albo dodać te funkcje do Mutt, albo otworzyć wiadomość w czymś z tą funkcją (np. Emacs z EPA / EasyPG, który powinien być domyślnie włączony w tych dniach) lub przesłać wiadomość bezpośrednio do polecenia (lub gpgme-tool jeśli chcesz, ale podczas pipowania ogólnie łatwiej jest przejść prosto do zwykłego polecenia).
Jeśli chodzi o GPGME, nie każdy ma go dostępny, ponieważ zawsze musi być skompilowany z tej samej wersji źródłowej, co jest zainstalowany w systemie. Jeśli uaktualnisz GPG i nie przekompilujesz GPGME w celu dopasowania, prawdopodobnie wystąpią problemy. Z drugiej strony zazwyczaj zaleca się instalowanie GPG ze źródła tam, gdzie to możliwe, więc jeśli wybierzesz trasę GPGME, dobrą praktyką jest po prostu uruchomienie ponownej kompilacji podczas aktualizacji GPG i wszystko powinno być w porządku.
Podczas gdy osoby, które polegają wyłącznie na pakietach dostarczonych przez ich wybraną dystrybucję, będą również podlegały wszystkim, co opiekunowie tych pakietów mogą mieć kłopotów z utrzymaniem, i mogą, ale nie zawsze, rozumieć wymagania współpracy GPG i GPGME. Na przykład pakiet MacPorts dla GPGME jest zależny od GPG 2.0.x, co z kolei powoduje konflikt z GPG 2.1.x, więc większość osób instalujących 2.1 nie może również zainstalować GPGME, mimo że wyraźnie współpracują ze sobą. Uruchomienie GPGME w tym scenariuszu wymaga robienia rzeczy, które zaleca MacPorts (kompilacja rzeczy poza systemem zarządzania portami, ale w obrębie /opt/local
). Niektóre dystrybucje Linuksa mogą mieć podobne problemy.
Jeśli więc zamierzasz używać tylko PGP / MIME, nie powinno być problemów z korzystaniem z integracji GPGME, a to oznacza, że nigdy nie będziesz musiał konfigurować określonych poleceń w swoim .muttrc
pliku. Jeśli masz do czynienia z PGP / in-line, będziesz miał problemy, ale nie można ich uniknąć w żaden sposób z Muttem, więc polecam użycie GPGME, jeśli możesz.
OŚWIADCZENIE: Jestem zaangażowany w pracę deweloperów nad stworzeniem API dla API dla wszystkich deweloperów spoza C, aby móc korzystać z rzeczy po przeglądzie. Przeniesiłem także PyME 0.9 z Python 2 do Python 3 (obecnie jest to gałąź GPGME i tylko wersja Python 2 jest dostępna przez PyPI i pip).
AKTUALIZACJA: ten port PyME do Pythona 3 znajduje się teraz w gałęzi master GPGME i jest dostępny na PyPI jako pyme3.