Zasięg

Grow

Manage

Automate

Zasięg

Grow

Manage

Automate

S/MIME Część 4: Łatwe zbieranie kluczy publicznych odbiorców – z webhookami SparkPost Inbound Relay

Email

1 min read

S/MIME Część 4: Łatwe zbieranie kluczy publicznych odbiorców – z webhookami SparkPost Inbound Relay

Email

1 min read

S/MIME Część 4: Łatwe zbieranie kluczy publicznych odbiorców – z webhookami SparkPost Inbound Relay

W tej serii widzieliśmy, że dołączenie podpisu S/MIME jest stosunkowo proste. Wysyłanie zaszyfrowanej poczty S/MIME jest bardziej skomplikowane, ponieważ musisz uzyskać klucze publiczne odbiorców. To jedna rzecz, gdy korzystasz z klienta pocztowego dla ludzi, takiego jak Thunderbird – ale jak to może działać w przypadku generowanych przez aplikację strumieni e-mailowych?

W części 1, odbyliśmy szybki przegląd S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach pocztowych. Część 2 wprowadziła nas do prostego narzędzia wiersza poleceń do podpisywania i szyfrowania e-maili, a następnie wysyłania ich przez SparkPost. Część 3 pokazała, jak wprowadzać bezpieczne strumienie pocztowe do platform lokalnych, takich jak Port25 PowerMTA i Momentum.

W tej serii widzieliśmy, że dodawanie podpisu S/MIME jest dość proste. Wysyłanie zaszyfrowanej poczty S/MIME jest bardziej skomplikowane, ponieważ musisz uzyskać publiczne klucze odbiorców. To jedno, gdy używasz klienta pocztowego dla ludzi, takiego jak Thunderbird – ale jak to zrobić ze strumieniami e-mail generowanymi przez aplikacje?

Ale zaczekaj – istnieje inny sposób na dotarcie do Mordoru, aby uzyskać te klucze. Twoja usługa może zaprosić Twoich klientów (oczywiście e-mailem), aby wysłali do Ciebie z powrotem podpisaną wiadomość na znany adres obsługi klienta. Korzystając z magicznych możliwości webhooks SparkPost Inbound Relay, wyodrębnimy i przechowamy ten klucz publiczny do Twojego użytku.

Możemy to podsumować w prostym przypadku użycia:

  • Jako odbiorca wiadomości, dostarczam Twojej usłudze mój osobisty podpis e-mail, tak aby w przyszłości wiadomości mogły być do mnie wysyłane w zaszyfrowanej formie S/MIME.

Na tej podstawie określmy bardziej szczegółowe wymagania:




  • Potrzebujemy zawsze dostępnej, niezawodnej usługi odbierania e-maili, aby otrzymywać te podpisane wiadomości.

  • Nie powinny obowiązywać żadne specjalne wymagania dotyczące formatu wiadomości, poza tym, że powinny one zawierać podpis S/MIME.

  • Ponieważ każdy może próbować wysłać pocztę do tej usługi, powinna być ona zaprojektowana defensywnie, na przykład, aby odrzucać „podrobione” wiadomości od złych podmiotów. Konieczne będzie kilka warstw sprawdzania.

  • Jeśli wszystko jest w porządku, usługa zapisze certyfikat w pliku, używając znanego formatu tekstu jawnego wzbogaconej ochrony poczty (PEM).

Istnieją pewne wymagania niefunkcjonalne:

  • Usługi webhook typu maszyna-do-maszyny mogą być trudne do zobaczenia tylko z odpowiedzi na to, co się dzieje wewnątrz. Usługa powinna dostarczać obszerne aplikacyjne dzienniki czytelne dla ludzi. W szczególności analiza i sprawdzanie certyfikatów powinny być rejestrowane.

  • Dodajemy przypadki testowe dla wewnętrznych aplikacji, korzystając z miłego frameworka Pytest, i uruchamiamy te testy automatycznie przy włączaniu używając integracji Travis CI z GitHub.

OK – zacznijmy!

1. Przegląd rozwiązania

Tak będzie wyglądać ogólne rozwiązanie.

2. Instalacja, konfiguracja i uruchamianie aplikacji webowej

Zaczniemy od tej części, aby mieć ją w pełni przetestowaną przed wdrożeniem webhooków do obsługi przychodzących przekaźników.

Aplikacja webowa jest zawarta w tym samym projekcie GitHub co części 1 – 3, więc jeśli podążałeś za tymi częściami, to już ją masz. Oto nowe elementy:

  • Program readSMIMEsig.py – odczytywanie e-maila i analizowanie certyfikatów pośrednich i użytkownika.

  • Program webapp.py – prosta aplikacja webowa zgodna z Flask do użycia z SparkPost Inbound Relay Webhooks.

  • webapp.ini – plik konfiguracyjny dla powyższego. Plik konfiguracji umożliwia łatwe przekazywanie tych samych wartości zarówno do aplikacji linii komend, jak i webowych.




Musisz upewnić się, że Twój host ma prawidłowy numer portu TCP otwarty na przychodzące żądania ze świata zewnętrznego, aby SparkPost mógł wysyłać POSTy do Twojej aplikacji. Jeśli jesteś hostowany na AWS EC2, na przykład, będziesz musiał skonfigurować grupę zabezpieczeń swojego zasobu.

Instrukcje dotyczące konfigurowania i uruchamiania aplikacji webowej można znaleźć tutaj – to całkiem proste. Aby sprawdzić, czy Twoja aplikacja działa i jest dostępna ze świata zewnętrznego, możesz wysłać (puste) żądania z innego hosta używając na przykład curl:

curl -X POST https://app.trymsys.net:8855/

Powinieneś zobaczyć odpowiedź taką jak:

{"message":"Unknown Content-Type in request headers"}

To dobra rzecz – Twoja aplikacja działa!

W webapp.log na Twoim hostingu zobaczysz wynik podobny do tego:

2019-01-15 00:11:07,575,root,INFO,Żądanie z 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Nieznany Content-Type: None

Aby pomóc Ci szybko pracować z rzeczywistymi danymi w swojej aplikacji, możesz zaimportować to konkretne żądanie Postman z repozytorium projektu. Symuluje ono, co będzie robić Twoje konto SparkPost, tj. wysyła HTTPS POST zawierający e-mail z określonym, ważnym certyfikatem (należącym do mojego konta testowego) do Twojej aplikacji.

Musisz tylko zmienić adres docelowy w żądaniu (w szarym polu powyżej) na zgodny z Twoją instalacją. Jeśli zmieniłeś wartość tokenu w webapp.ini, dostosuj wartość nagłówka w Postman tak, aby pasowała.

Jeśli Twoja aplikacja działa, zobaczysz odpowiedź „200 OK” w Postman. Plik webapp.log Twojego hosta zawierał będzie wyniki takie jak te:

2019-01-15 00:11:48,554,root,INFO,Żądanie z 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM przeszło 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=Podpis Kryptograficzny S/MIME 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| zapisano plik ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Dla szybkiego sprawdzenia, poszukaj ostatniej linii – jeśli napisano „zapisano plik”, to wszystko jest w porządku. Reszta to pokazanie procesu sprawdzania DKIM i walidacji certyfikatu.

Zaczniemy od tej części, aby mieć ją w pełni przetestowaną przed wdrożeniem webhooków do obsługi przychodzących przekaźników.

Aplikacja webowa jest zawarta w tym samym projekcie GitHub co części 1 – 3, więc jeśli podążałeś za tymi częściami, to już ją masz. Oto nowe elementy:

  • Program readSMIMEsig.py – odczytywanie e-maila i analizowanie certyfikatów pośrednich i użytkownika.

  • Program webapp.py – prosta aplikacja webowa zgodna z Flask do użycia z SparkPost Inbound Relay Webhooks.

  • webapp.ini – plik konfiguracyjny dla powyższego. Plik konfiguracji umożliwia łatwe przekazywanie tych samych wartości zarówno do aplikacji linii komend, jak i webowych.




Musisz upewnić się, że Twój host ma prawidłowy numer portu TCP otwarty na przychodzące żądania ze świata zewnętrznego, aby SparkPost mógł wysyłać POSTy do Twojej aplikacji. Jeśli jesteś hostowany na AWS EC2, na przykład, będziesz musiał skonfigurować grupę zabezpieczeń swojego zasobu.

Instrukcje dotyczące konfigurowania i uruchamiania aplikacji webowej można znaleźć tutaj – to całkiem proste. Aby sprawdzić, czy Twoja aplikacja działa i jest dostępna ze świata zewnętrznego, możesz wysłać (puste) żądania z innego hosta używając na przykład curl:

curl -X POST https://app.trymsys.net:8855/

Powinieneś zobaczyć odpowiedź taką jak:

{"message":"Unknown Content-Type in request headers"}

To dobra rzecz – Twoja aplikacja działa!

W webapp.log na Twoim hostingu zobaczysz wynik podobny do tego:

2019-01-15 00:11:07,575,root,INFO,Żądanie z 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Nieznany Content-Type: None

Aby pomóc Ci szybko pracować z rzeczywistymi danymi w swojej aplikacji, możesz zaimportować to konkretne żądanie Postman z repozytorium projektu. Symuluje ono, co będzie robić Twoje konto SparkPost, tj. wysyła HTTPS POST zawierający e-mail z określonym, ważnym certyfikatem (należącym do mojego konta testowego) do Twojej aplikacji.

Musisz tylko zmienić adres docelowy w żądaniu (w szarym polu powyżej) na zgodny z Twoją instalacją. Jeśli zmieniłeś wartość tokenu w webapp.ini, dostosuj wartość nagłówka w Postman tak, aby pasowała.

Jeśli Twoja aplikacja działa, zobaczysz odpowiedź „200 OK” w Postman. Plik webapp.log Twojego hosta zawierał będzie wyniki takie jak te:

2019-01-15 00:11:48,554,root,INFO,Żądanie z 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM przeszło 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=Podpis Kryptograficzny S/MIME 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| zapisano plik ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Dla szybkiego sprawdzenia, poszukaj ostatniej linii – jeśli napisano „zapisano plik”, to wszystko jest w porządku. Reszta to pokazanie procesu sprawdzania DKIM i walidacji certyfikatu.

Zaczniemy od tej części, aby mieć ją w pełni przetestowaną przed wdrożeniem webhooków do obsługi przychodzących przekaźników.

Aplikacja webowa jest zawarta w tym samym projekcie GitHub co części 1 – 3, więc jeśli podążałeś za tymi częściami, to już ją masz. Oto nowe elementy:

  • Program readSMIMEsig.py – odczytywanie e-maila i analizowanie certyfikatów pośrednich i użytkownika.

  • Program webapp.py – prosta aplikacja webowa zgodna z Flask do użycia z SparkPost Inbound Relay Webhooks.

  • webapp.ini – plik konfiguracyjny dla powyższego. Plik konfiguracji umożliwia łatwe przekazywanie tych samych wartości zarówno do aplikacji linii komend, jak i webowych.




Musisz upewnić się, że Twój host ma prawidłowy numer portu TCP otwarty na przychodzące żądania ze świata zewnętrznego, aby SparkPost mógł wysyłać POSTy do Twojej aplikacji. Jeśli jesteś hostowany na AWS EC2, na przykład, będziesz musiał skonfigurować grupę zabezpieczeń swojego zasobu.

Instrukcje dotyczące konfigurowania i uruchamiania aplikacji webowej można znaleźć tutaj – to całkiem proste. Aby sprawdzić, czy Twoja aplikacja działa i jest dostępna ze świata zewnętrznego, możesz wysłać (puste) żądania z innego hosta używając na przykład curl:

curl -X POST https://app.trymsys.net:8855/

Powinieneś zobaczyć odpowiedź taką jak:

{"message":"Unknown Content-Type in request headers"}

To dobra rzecz – Twoja aplikacja działa!

W webapp.log na Twoim hostingu zobaczysz wynik podobny do tego:

2019-01-15 00:11:07,575,root,INFO,Żądanie z 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Nieznany Content-Type: None

Aby pomóc Ci szybko pracować z rzeczywistymi danymi w swojej aplikacji, możesz zaimportować to konkretne żądanie Postman z repozytorium projektu. Symuluje ono, co będzie robić Twoje konto SparkPost, tj. wysyła HTTPS POST zawierający e-mail z określonym, ważnym certyfikatem (należącym do mojego konta testowego) do Twojej aplikacji.

Musisz tylko zmienić adres docelowy w żądaniu (w szarym polu powyżej) na zgodny z Twoją instalacją. Jeśli zmieniłeś wartość tokenu w webapp.ini, dostosuj wartość nagłówka w Postman tak, aby pasowała.

Jeśli Twoja aplikacja działa, zobaczysz odpowiedź „200 OK” w Postman. Plik webapp.log Twojego hosta zawierał będzie wyniki takie jak te:

2019-01-15 00:11:48,554,root,INFO,Żądanie z 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM przeszło 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=Podpis Kryptograficzny S/MIME 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| zapisano plik ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Dla szybkiego sprawdzenia, poszukaj ostatniej linii – jeśli napisano „zapisano plik”, to wszystko jest w porządku. Reszta to pokazanie procesu sprawdzania DKIM i walidacji certyfikatu.

3. SparkPost inbound relay webhooks konfiguracja

Po pierwsze, wybieramy domenę do użycia jako nasz adres wiadomości przychodzących – tutaj będzie to inbound.thetucks.com. Skonfiguruj swoją domenę zgodnie z tym przewodnikiem. Oto szczegółowe kroki, które zastosowałem:




3.1 Dodaj rekordy MX

Będziesz potrzebować dostępu do swojego specyficznego konta dostawcy usług internetowych. Po zakończeniu możesz je sprawdzić za pomocą dig – oto polecenie dla mojej domeny.

dig +short MX inbound.thetucks.com

Powinieneś zobaczyć:

10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com.




3.2 Utwórz domenę przychodzącą

Użyj kolekcji API Postman SparkPost, wybierając Inbound Domains / Create .. call. Ciało żądania POST zawiera twoją domenę, na przykład:

{    "domain": "inbound.thetucks.com" }




3.3 Utwórz Webhook dla Przekierowań

Utwórz webhook dla przekierowań przychodzących, używając odpowiedniego wywołania Postman. Ciało wiadomości w moim przypadku zawiera:

{ "name": "Certificate Collection Webhook", "target": "https://app.trymsys.net:8855/", "auth_token": "t0p s3cr3t t0k3n", "match": { "protocol": "SMTP", "domain": "inbound.thetucks.com" } }

Jak wcześniej wspomniano, zalecam ustawienie własnej wartości auth_token, jak ustawiono w pliku webapp.ini na twoim hoście.

Twoja wartość „target” musi odpowiadać adresowi hosta i portowi TCP, na którym będziesz hostować aplikację sieciową.

Twoja wartość „domain” musi odpowiadać skonfigurowanym rekordom MX w kroku 1.







To wszystko! Instalacja jest ukończona. Powinieneś teraz móc wysyłać certyfikaty na swój adres przychodzący, będą one przetwarzane i wyświetlane na twoim hostingu aplikacji sieciowej – w tym przypadku, pliku o nazwie bob.lumreeker@gmail.com.crt.

Teraz możesz wysyłać zaszyfrowane e-maile do Boba, używając narzędzi opisanych w częściach 2 i 3 tej serii.

Możesz zbadać zawartość certyfikatu, używając:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

4. Wewnętrzności: sprawdzanie DKIM, walidacja certyfikatu

Aplikacja sprawdza, czy otrzymane e-maile mają ważny DKIM i czy same certyfikaty są ważne, jak opisano tutaj. Znajdują się tam również notatki dotyczące wdrożenia oraz pomysły na dalsze działania.

Podsumowując…

Widzieliśmy, jak klucze publiczne odbiorców mogą być łatwo gromadzone za pomocą wiadomości e-mail na adres webhooks dla przychodzącej wiadomości. Po wykonaniu tego, ci odbiorcy mogą otrzymywać swoje wiadomości w szyfrowanej formie S/MIME.

To wszystko na teraz! Udanych wysyłek.

Dołącz do naszego Newslettera.

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Dołącz do naszego Newslettera.

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Dołącz do naszego Newslettera.

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Logo Pinterest
Logo Uber
Square logo
Logo Adobe
Logo Meta
Logo PayPal

Company

Ustawienia prywatności

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Logo Uber
Square logo
Logo Adobe
Logo Meta

Company

Ustawienia prywatności

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Logo Uber
Logo Adobe
Logo Meta

Zasięg

Grow

Manage

Automate

Zasoby

Company

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.