Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara yang Mudah – dengan SparkPost Inbound Relay Webhooks

Email

1 min read

S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara yang Mudah – dengan SparkPost Inbound Relay Webhooks

Email

1 min read

S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara yang Mudah – dengan SparkPost Inbound Relay Webhooks

Dalam seri ini, kita telah melihat bagaimana menyertakan tanda tangan S/MIME cukup sederhana. Mengirim email yang terenkripsi S/MIME lebih rumit karena Anda perlu mendapatkan kunci publik penerima. Ini satu hal ketika Anda menggunakan klien email untuk manusia seperti Thunderbird – tetapi bagaimana cara kerjanya dengan aliran email yang dihasilkan oleh aplikasi?

Dalam bagian 1, kami melakukan tur cepat dari S/MIME, melihat pada penandatanganan dan enkripsi aliran pesan kami di berbagai klien email. Bagian 2 membawa kami melewati alat baris perintah sederhana untuk menandatangani dan mengenkripsi email, kemudian mengirimkannya melalui SparkPost. Bagian 3 menunjukkan bagaimana menyuntikkan aliran email yang aman ke dalam platform lokal seperti Port25 PowerMTA dan Momentum.

Dalam seri ini, kita telah melihat bagaimana menyertakan tanda tangan S/MIME cukup sederhana. Mengirim email terenkripsi S/MIME lebih kompleks karena Anda perlu mendapatkan kunci publik penerima. Itu adalah satu hal ketika Anda menggunakan klien email untuk manusia seperti Thunderbird – tetapi bagaimana hal itu dapat bekerja dengan aliran email yang dihasilkan aplikasi?

Tapi tunggu – ada cara lain ke Mordor untuk mendapatkan kunci tersebut. Layanan Anda dapat mengundang pelanggan Anda (melalui email, tentu saja) untuk mengirim kembali email yang ditandatangani ke alamat layanan pelanggan yang diketahui. Dengan menggunakan kekuatan magis webhooks SparkPost Inbound Relay, kami akan mengekstrak dan menyimpan kunci publik itu untuk Anda gunakan.

Kami dapat merangkum ini dalam kasus penggunaan sederhana:

  • Sebagai penerima pesan, saya memberikan layanan Anda tanda tangan email pribadi saya melalui email, sehingga di masa depan, email dapat dikirim kepada saya dalam bentuk terenkripsi S/MIME.

Dari ini, mari kita turunkan beberapa persyaratan yang lebih rinci:




  • Kami memerlukan layanan email masuk yang selalu aktif dan dapat diandalkan untuk menerima email yang ditandatangani tersebut.

  • Tidak ada persyaratan khusus tentang format email, selain harus membawa tanda tangan S/MIME.

  • Karena siapa pun dapat mencoba mengirim email ke layanan ini, maka harus dirancang secara defensif, misalnya, untuk menolak pesan “spoof” dari pelaku buruk. Akan ada beberapa lapisan pemeriksaan.

  • Jika semuanya diperiksa dengan benar, layanan akan menyimpan sertifikat tersebut dalam sebuah file, menggunakan format Plain-Text Privacy-Enhanced Mail yang sudah dikenal (PEM).

Ada beberapa persyaratan non-fungsional:

  • Layanan webhook mesin ke mesin bisa sulit dilihat hanya dari respons terhadap apa yang terjadi di dalam. Layanan harus menyediakan log tingkat aplikasi yang dapat dibaca manusia secara ekstensif. Khususnya, parsing dan pemeriksaan sertifikat harus dicatat.

  • Kami menambahkan kasus uji untuk internal aplikasi, menggunakan kerangka kerja Pytest yang bagus, dan menjalankan pengujian tersebut secara otomatis pada check-in menggunakan integrasi Travis CI dengan GitHub.

Oke – Mari kita mulai!

1. Gambaran solusi

Inilah gambaran keseluruhan solusi.

2. Menginstal, mengonfigurasi, dan memulai aplikasi web

Kami akan memulai dengan bagian ini, sehingga kita memiliki pengujian sepenuhnya sebelum menyambungkan relay webhooks masuk.

Aplikasi web termasuk dalam proyek yang sama di GitHub seperti bagian 1 – 3, jadi jika Anda sudah mengikuti bagian tersebut, Anda sudah memilikinya. Berikut adalah bagian baru:

  • Program readSMIMEsig.py – membaca email dan memproses sertifikat pengguna dan sertifikat perantara.

  • Program webapp.py – aplikasi web sederhana yang kompatibel dengan Flask untuk digunakan dengan SparkPost Inbound Relay Webhooks.

  • webapp.ini – file konfigurasi untuk yang di atas. File konfigurasi memungkinkan nilai yang sama untuk diberikan dengan mudah ke kedua aplikasi command-line dan web.




Anda perlu memastikan host Anda memiliki nomor port TCP yang benar dibuka untuk permintaan masuk dari dunia luar sehingga SparkPost dapat mengirim pesan POST ke aplikasi Anda. Jika Anda menggunakan AWS EC2, misalnya, Anda perlu mengkonfigurasi Security Group dari instance Anda.

Instruksi untuk mengkonfigurasi dan memulai aplikasi web diberikan di sini – ini cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirim permintaan (kosong) dari host lain menggunakan curl, misalnya:

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

Anda harus melihat respons seperti:

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

Ini adalah hal yang baik – aplikasi Anda berjalan!

Di webapp.log pada host Anda, Anda akan melihat output yang mirip dengan ini:

2019-01-15 00:11:07,575,root,INFO,Permintaan dari 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,| Unknown Content-Type: None

Untuk membantu Anda bermain dengan data nyata di aplikasi Anda langsung, Anda dapat mengimpor Permintaan Postman spesifik ini dari repo proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirim https POST yang berisi email dengan sertifikat tertentu dan valid (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target dalam permintaan (di kotak abu-abu di atas) agar sesuai dengan instalasi Anda. Jika Anda mengubah nilai token di webapp.ini, sesuaikan nilai header di Postman agar sesuai.

Jika aplikasi Anda berfungsi, Anda akan melihat respons “200 OK” di Postman. File webapp.log host Anda akan berisi output seperti ini:

2019-01-15 00:11:48,554,root,INFO,Permintaan dari 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 passed 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=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Sertifikat: 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,| Sertifikat: 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,| file ditulis ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Untuk pemeriksaan cepat, periksa baris terakhir – jika mengatakan “written file” (file ditulis), maka Anda baik-baik saja. Bagian selanjutnya menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

Kami akan memulai dengan bagian ini, sehingga kita memiliki pengujian sepenuhnya sebelum menyambungkan relay webhooks masuk.

Aplikasi web termasuk dalam proyek yang sama di GitHub seperti bagian 1 – 3, jadi jika Anda sudah mengikuti bagian tersebut, Anda sudah memilikinya. Berikut adalah bagian baru:

  • Program readSMIMEsig.py – membaca email dan memproses sertifikat pengguna dan sertifikat perantara.

  • Program webapp.py – aplikasi web sederhana yang kompatibel dengan Flask untuk digunakan dengan SparkPost Inbound Relay Webhooks.

  • webapp.ini – file konfigurasi untuk yang di atas. File konfigurasi memungkinkan nilai yang sama untuk diberikan dengan mudah ke kedua aplikasi command-line dan web.




Anda perlu memastikan host Anda memiliki nomor port TCP yang benar dibuka untuk permintaan masuk dari dunia luar sehingga SparkPost dapat mengirim pesan POST ke aplikasi Anda. Jika Anda menggunakan AWS EC2, misalnya, Anda perlu mengkonfigurasi Security Group dari instance Anda.

Instruksi untuk mengkonfigurasi dan memulai aplikasi web diberikan di sini – ini cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirim permintaan (kosong) dari host lain menggunakan curl, misalnya:

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

Anda harus melihat respons seperti:

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

Ini adalah hal yang baik – aplikasi Anda berjalan!

Di webapp.log pada host Anda, Anda akan melihat output yang mirip dengan ini:

2019-01-15 00:11:07,575,root,INFO,Permintaan dari 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,| Unknown Content-Type: None

Untuk membantu Anda bermain dengan data nyata di aplikasi Anda langsung, Anda dapat mengimpor Permintaan Postman spesifik ini dari repo proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirim https POST yang berisi email dengan sertifikat tertentu dan valid (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target dalam permintaan (di kotak abu-abu di atas) agar sesuai dengan instalasi Anda. Jika Anda mengubah nilai token di webapp.ini, sesuaikan nilai header di Postman agar sesuai.

Jika aplikasi Anda berfungsi, Anda akan melihat respons “200 OK” di Postman. File webapp.log host Anda akan berisi output seperti ini:

2019-01-15 00:11:48,554,root,INFO,Permintaan dari 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 passed 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=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Sertifikat: 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,| Sertifikat: 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,| file ditulis ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Untuk pemeriksaan cepat, periksa baris terakhir – jika mengatakan “written file” (file ditulis), maka Anda baik-baik saja. Bagian selanjutnya menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

Kami akan memulai dengan bagian ini, sehingga kita memiliki pengujian sepenuhnya sebelum menyambungkan relay webhooks masuk.

Aplikasi web termasuk dalam proyek yang sama di GitHub seperti bagian 1 – 3, jadi jika Anda sudah mengikuti bagian tersebut, Anda sudah memilikinya. Berikut adalah bagian baru:

  • Program readSMIMEsig.py – membaca email dan memproses sertifikat pengguna dan sertifikat perantara.

  • Program webapp.py – aplikasi web sederhana yang kompatibel dengan Flask untuk digunakan dengan SparkPost Inbound Relay Webhooks.

  • webapp.ini – file konfigurasi untuk yang di atas. File konfigurasi memungkinkan nilai yang sama untuk diberikan dengan mudah ke kedua aplikasi command-line dan web.




Anda perlu memastikan host Anda memiliki nomor port TCP yang benar dibuka untuk permintaan masuk dari dunia luar sehingga SparkPost dapat mengirim pesan POST ke aplikasi Anda. Jika Anda menggunakan AWS EC2, misalnya, Anda perlu mengkonfigurasi Security Group dari instance Anda.

Instruksi untuk mengkonfigurasi dan memulai aplikasi web diberikan di sini – ini cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirim permintaan (kosong) dari host lain menggunakan curl, misalnya:

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

Anda harus melihat respons seperti:

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

Ini adalah hal yang baik – aplikasi Anda berjalan!

Di webapp.log pada host Anda, Anda akan melihat output yang mirip dengan ini:

2019-01-15 00:11:07,575,root,INFO,Permintaan dari 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,| Unknown Content-Type: None

Untuk membantu Anda bermain dengan data nyata di aplikasi Anda langsung, Anda dapat mengimpor Permintaan Postman spesifik ini dari repo proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirim https POST yang berisi email dengan sertifikat tertentu dan valid (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target dalam permintaan (di kotak abu-abu di atas) agar sesuai dengan instalasi Anda. Jika Anda mengubah nilai token di webapp.ini, sesuaikan nilai header di Postman agar sesuai.

Jika aplikasi Anda berfungsi, Anda akan melihat respons “200 OK” di Postman. File webapp.log host Anda akan berisi output seperti ini:

2019-01-15 00:11:48,554,root,INFO,Permintaan dari 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 passed 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=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Sertifikat: 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,| Sertifikat: 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,| file ditulis ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Untuk pemeriksaan cepat, periksa baris terakhir – jika mengatakan “written file” (file ditulis), maka Anda baik-baik saja. Bagian selanjutnya menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

3. Pengaturan SparkPost inbound relay webhooks

Pertama, kami memilih domain untuk digunakan sebagai alamat pesan masuk kami – di sini, akan menjadi inbound.thetucks.com. Atur domain Anda mengikuti panduan ini. Berikut adalah langkah-langkah yang saya gunakan secara detail:




3.1 Tambahkan Catatan MX

Anda memerlukan akses ke akun Penyedia Layanan Internet spesifik Anda. Setelah selesai, Anda dapat memeriksanya dengan dig – berikut adalah perintah untuk domain saya.

dig +short MX inbound.thetucks.com

Anda seharusnya melihat:

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




3.2 Buat Inbound Domain

Gunakan SparkPost Postman API collection, pilih Inbound Domains / Create .. call. Badan permintaan POST berisi domain Anda, contohnya:

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




3.3 Buat Relay Webhook

Buat inbound relay webhook menggunakan panggilan Postman yang relevan. Badan pesan dalam kasus saya berisi:

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

Seperti yang disebutkan sebelumnya, saya merekomendasikan mengatur auth_token ke nilai rahasia Anda sendiri, seperti yang ditentukan dalam file webapp.ini pada host Anda.

Nilai “target” Anda perlu sesuai dengan alamat host dan port TCP tempat Anda akan menghosting aplikasi web.

Nilai “domain” Anda perlu sesuai dengan catatan MX yang Anda atur pada langkah 1.







Itu dia! Koneksi selesai. Sekarang Anda seharusnya dapat mengirim sertifikat ke alamat masuk Anda, mereka akan diproses dan muncul di host aplikasi web Anda – dalam hal ini, file bernama bob.lumreeker@gmail.com.crt.

Sekarang Anda dapat mengirim email terenkripsi kepada Bob, menggunakan alat yang dijelaskan di bagian 2 & 3 dari seri ini.

Anda dapat memeriksa isi sertifikat menggunakan:

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

4. Internals: pengecekan DKIM, validasi sertifikat

Aplikasi memeriksa email yang diterima memiliki DKIM yang valid dan memeriksa bahwa sertifikat itu sendiri valid, seperti yang dijelaskan di sini. Ada catatan implementasi di sana juga, dan ide untuk pekerjaan lebih lanjut.

Menyimpulkan…

Kami telah melihat bagaimana kunci publik penerima dapat dikumpulkan dengan mudah menggunakan email ke alamat webhooks inbound relay. Setelah selesai, penerima tersebut dapat menerima pesan mereka dalam bentuk terenkripsi S/MIME.

Itu saja untuk sekarang! Selamat mengirim.

Bergabunglah dengan Newsletter kami.

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Bergabunglah dengan Newsletter kami.

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Bergabunglah dengan Newsletter kami.

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

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

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Uber logo
Square logo
Logo Adobe
Logo Meta

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Uber logo
Logo Adobe
Logo Meta

Reach

Grow

Manage

Automate

Sumber Daya

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.