I run a simple web service, and I need to securely send emails to users via PHP.
I tuoi requisiti precisi di "inviare e-mail in modo sicuro" sono sconosciuti. Ma nessuna delle tue proposte offre sicurezza end-to-end, ovvero a seconda del percorso che una o più parti possono intercettare e persino modificare la posta.
In dettaglio:
SMTP ha solo la crittografia hop-by-hop, il che significa che qualsiasi MTA sulla via avrà la posta in chiaro anche se TLS è stato utilizzato per trasmettere la posta al MTA.
Inoltre, non vi è alcuna garanzia che TLS venga utilizzato perché il trasferimento SMTP inizia in modo semplice (senza crittografia) e viene aggiornato solo opzionalmente a TLS con il comando STARTTLS. Se questo fallisce o se nessun STARTTLS è offerto dal MTA ricevente, la posta è solitamente inviata in testo semplice (cioè la crittografia best effort). Esistono vari modi in cui TLS può avere esito negativo (configurazione errata) o essere in grado di fallire da parte di un utente malintenzionato e ci sono anche firewall che semplicemente rimuovono in modo trasparente il supporto di STARTTLS in modo che possano controllare la posta.
A parte questo il MTA hop successivo viene scelto dal record MX DNS. Con lo spoofing del DNS, la posta può quindi essere reindirizzata / intercettata a meno che l'MTA di invio non stia utilizzando il DNSSec rigoroso, che in genere non lo è.