Spesso mi capita di dover usare mailx da riga di comando per inviare semplici mail di notifica, generalmente all’interno di uno script.
Il pacchetto mailx è questo (in centos 7)
12345678910111213141516171819202122232425262728 ]# yum info mailxInstalled PackagesName : mailxArch : x86_64Version : 12.5Release : 12.el7_0Size : 466 kRepo : installedFrom repo : updatesSummary : Enhanced implementation of the mailx commandURL : http://heirloom.sourceforge.net/mailx.htmlLicense : BSD with advertising and MPLv1.1Description : Mailx is an enhanced mail command, which provides the functionality: of the POSIX mailx command, as well as SysV mail and Berkeley Mail: (from which it is derived).:: Additionally to the POSIX features, mailx can work with Maildir/ e–mail: storage format (as well as mailboxes), supports IMAP, POP3 and SMTP: protocols (including over SSL) to operate with remote hosts, handles mime: types and different charsets. There are a lot of other useful features,: see mailx(1).:: And as its ancient analogues, mailx can be used as a mail script language,: both for sending and receiving mail.:: Besides the “mailx” command, this package provides “mail” and “Mail”: (which should be compatible with its predecessors from the mailx–8.x source),: as well as “nail” (the initial name of this project).
Utilizzando un mail server tipo postfix dall’interno di una rete in cui permetto il relay, per mandare un mail basta il comando:
1 ]# mailx -v -s “Subject” -S smtp=smtp://mailserver.dominio.it -S from=”me@server(Gabriele Merli)” destination.mail@dominio.itIl soggetto sarà “Subject”, il server di posta utilizzato sarà mailserver.dominio.it, il mail del mittente è me@server con nome Gabriele Merli e il destinatario sarà destination.mail@dominio.it
Poi scrivo il testo, termino con un . e la mail viene inviata.
All’interno di uno script con body precompilato basta una cosa del tipo
1 ]# echo “ciao” | mailx -v -s “Subject” -S smtp=smtp://mailserver.dominio.it -S from=”me@server(Gabriele Merli)” destination.mail@dominio.ited il testo del messaggio sarà “ciao”.
Volendo usare GMAIL per inviare la stessa semplicissima mail la questione si complica leggermente.
Il comando da dare è questo:
1 echo “Un caro saluto” | mailx –v –s “Ciao Gabriele” –S smtp–auth=login –S smtp=smtps://smtp.gmail.com:465 –S from=“utente@gmail.com(Gabriele Merli – gmail)” –S smtp–auth–user=utente@gmail.com –S smtp–auth–password=lapassword –S ssl–verify=ignore –S nss–config–dir=~/certs2/ destination.mail@dominio.itI parametri in più servono per effettuare l’autenticazione in fase di invio via smtp e per connettersi al server via ssl.
Questa la man page di mailx riguardo ai parametri sopra indicati
1234 ssl–verifySets the action to be performed if an error occurs during SSL/TLS server certificate validation. Valid values are `strict‘ (fail andclose connection immediately), `ask‘ (ask whether to continue on standard input), `warn’ (print a warning and continue), `ignore‘ (donot perform validation). The default is `ask‘.Nel mio caso ignoro gli errori di validazione del certificato ssl/tls (vedremo poi in seguito)
123 smtp–authSets the SMTP authentication method. If set to `login‘, or if unset and smtp–auth–user is set, AUTH LOGIN is used. If set to `cram–md5‘, AUTH CRAM-MD5 is used; if set to `plain’, AUTH PLAIN is used. Otherwise, no SMTP authentication is performed.L’autenticazione avviene tramite AUTH LOGIN passando poi username (generalmente l’indirizzo email @ gmail.com) e la password
123456 nss–config–dirA directory that contains the files certN.db to retrieve certificates, keyN.db to retrieve private keys, and secmod.db, where N is a digit.These are usually taken from Mozilla installations, so an appropriate value might be `~/.mozilla/firefox/default.clm‘. Mailx opens thesefiles read–only and does not modify them. However, if the files are modified by Mozilla while mailx is running, it will print a `Bad dataâ[mbase‘ message. It may be necessary to create copies of these files that are exclusively used by mailx then. Only applicable if S/MIME andSSL/TLS support is built using Network Security Services (NSS).La directory dove andiamo a memorizzare i certificati (vedremo poi in seguito), nel mio caso ~/certs
Volendo mandare mail utilizzando starttls e la porta 587 (quindi primo collegamento in chiaro e poi si effettua la cifratura), il comando da dare è molto simile a quello visto precedentemente
1 echo “Un caro saluto” | mailx –v –s “Ciao Gabriele” –S smtp–use–starttls –S smtp–auth=login –S smtp=smtp://smtp.gmail.com:587 -S from=”utente@gmail.com(Gabriele Merli – gmail)” -S smtp-auth-user=utente@gmail.com -S smtp-auth-password=lapassword -S ssl-verify=ignore -S nss-config-dir=~/certs2/ destination.mail@dominio.itIn più abbiamo messo l’opzione
123 smtp–use–starttlsCauses mailx to issue a STARTTLS command to make an SMTP session SSL/TLS encrypted. Not all servers support this command; because of commonimplementation defects, it cannot be automatically determined whether a server supports it or notche da il comando STARTTLS.
Ho cambiato la porta di comunicazione(587) e il protocollo (da smtps a smtp)
Se non si specifica una directory in cui sono contenuti i certificati/chiavi nel formato nss (-S nss-config-dir=~/certs/) l’errore sarà
123 220 2.0.0 Ready to start TLSMissing “nss-config-dir” variable.“/home/merli/dead.letter” 11/354e l’email non verrà mandata.
Vediamo ora come crearsi una directory con i certificati che servono per inviare le mail con gmail.
Vado a utilizzare il tool “certutil”
123456789101112131415161718192021222324 ]# which certutil/bin/certutil]# rpm -qf /bin/certutilnss–tools–3.19.1–3.el7_1.x86_64]# yum info nss-toolsInstalled PackagesName : nss–toolsArch : x86_64Version : 3.19.1Release : 3.el7_1Size : 1.8 MRepo : installedFrom repo : updatesSummary : Tools for the Network Security ServicesURL : http://www.mozilla.org/projects/security/pki/nss/License : MPLv2.0Description : Network Security Services (NSS) is a set of libraries designed to: support cross–platform development of security–enabled client and: server applications. Applications built with NSS can support SSL: X.509 v3 certificates, and other security standards.:: Install the nss–tools package if you need command–line tools to: manipulate the NSS certificate and key database.La configurazione di base che possiamo fare è estremamente semplice. Basta infatti creare una directory (nel mio caso ~/certs)
1 utente@client ]# mkdir certse poi lanciare certutil per creare all’interno della directory i database con i certificati e le chiavi (non mettendo password)
1 utente@client: ]# certutil -N -d certs/-N nuova
-d il nome della directory in cui creare il dbAll’interno di certs poi mi troverò 3 file .db (certX.db, keyX.db e secmod.db) che conterranno i vari certificati/chiavi che posso importare.
Visto che, quando mandiamo la mail via gmail e mailx, specifichiamo il parametro
-S ssl-verify=ignore
che di fatto ignora ogni possibile verifica del certificato, questo è tutto quello che dobbiamo fare.
In fase di invio ci sarà un warning di questo tipo
12 Error in certificate: Peer‘s certificate issuer is not recognized.Comparing DNS name: “smtp.gmail.com”ma la mail verrà comunque inviata. Chiaramente se avessi scritto -S ssl-verify=strict questo sarebbe stato un errore che avrebbe fermato la procedura.
Se si vuole evitare di crearsi una cartella (certs) con all’interno i vari database sostanzialmente vuoti, è possibile riciclare quella che già esiste sul sistema se si sta usando firefox.
All’interno della cartella~/.mozilla/firefox/XXXprofile_numberXXXX.default/
ci sono gli stessi identici 3 file di cui sopra (certX.db, keyX.db e secmod.db) che già contengono tutti i certificati dei server che abbiamo accettato durante la navigazione in internet con firefox.
Basterà quindi specificare in mailx il parametro
-S nss-config-dir=~/.mozilla/firefox/XXXprofile_numberXXXX.default/
(dove XXXprofile_numberXXXX è il nome della cartella contenente il nostro profilo).
Nota che mi sembra di aver capito che i certificati delle CA sono hard-coded all’interno dell’eseguibile di firefox e i certificati che vengno aggiunti in questi file .db sono solo quelli accettati dall’utente.
Ora la parte interessante. Come posso far sparire il warning
“Error in certificate: Peer’s certificate issuer is not recognized.” e potenzialmente effetture la verifica “strict” del certificato di gmail?Presumo di aver già creato la directory certs nella home e di aver dato il comando di certutil per creare i 3 file di database (sostanzialmente vuoti) al suo interno.
Ora con il client openssl vado a interrogare smtp.gmail.com per vedere che certificati vengono utilizzati
12345678910111213141516171819202122232425 ]# openssl s_client -connect smtp.gmail.com:465CONNECTED(00000003)depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authorityverify return:1depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CAverify return:1depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2verify return:1depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = smtp.gmail.comverify return:1—–Certificate chain0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.comi:/C=US/O=Google Inc/CN=Google Internet Authority G21 s:/C=US/O=Google Inc/CN=Google Internet Authority G2i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CAi:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority—–Server certificate——–BEGIN CERTIFICATE——–XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX——–END CERTIFICATE——–subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.comissuer=/C=US/O=Google Inc/CN=Google Internet Authority G2Tra le rige —–BEGIN CERTIFICATE—– e —–END CERTIFICATE—– mi trovò il certificato del server. Questo è firmato (Issuer) da “Google Internet Authority” il quale è firmato da “GeoTrust Global” il quale è firmato dalla root CA “Equifax Secure Certificate Authority”. Questi 3 certificati formano la chain che permette al client (conoscendo la CA) di essere sicuro di star parlando proprio con gmail.
Dando lo stesso comando di cui sopra, ma specificando anche -showcerts potrò vedere tutti e 3 i certificati della chain
12345678910111213141516171819202122 ]# openssl s_client -showcerts -connect smtp.gmail.com:465—–Certificate chain0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.comi:/C=US/O=Google Inc/CN=Google Internet Authority G2——–BEGIN CERTIFICATE——–AAAAAAAAAAAAAAAAAAAAAAAAAAAA——–END CERTIFICATE——–1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA——–BEGIN CERTIFICATE——–BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB——–END CERTIFICATE——–2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CAi:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority——–BEGIN CERTIFICATE——–CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC——–END CERTIFICATE——–Ora prendo ciascuna riga compresa tra —–BEGIN CERTIFICATE—– e —–END CERTIFICATE—– (comprese) e creo 3 file (chiamti come voglio, nel mio caso google, geotrust e equifax) contenenti i 3 certificati.
Vado ora ad aggiungere al mio db i 3 certificati appena salvati
123 ]# certutil -A -n “GeoTrust Global CA” -t “TC,,” -d certs -i geotrust]# certutil -A -n “Equifax Secure Certificate Authority” -t “TCP,,” -d certs -i equifax]# certutil -A -n “Google Internet Authority” -t “TC,,” -d certs -i google-A aggiunge
-n è il nickname del certificato che gli asssegno nel db (nel mio caso ho copiato il CN)
-t è la tipologia di certificato (non ho pienamente compreso cosa sia)
123456 · p – Valid peer· P – Trusted peer (implies p)· c – Valid CA· T – Trusted CA (implies c)· C – trusted CA for client authentication (ssl server only)· u – user-d certs la directory che contiene i file del database
-i nome_file il nome del file contenente il certificatoVerifico di aver importato correttamente i 3 certificati dando il comando
12345678 ]# certutil -L -d certsCertificate Nickname Trust AttributesSSL,S/MIME,JAR/XPIGeoTrust Global CA CT,,Google Internet Authority CT,,Equifax Secure Certificate Authority CT,,per curiosità lo stesso comando lo puoi dare sulla directory di mozilla e verificare che i certificati che vedi sono gli stessi che trovi nelle Preferences/Advanced/Certificates/View Certificates/Servers
Ora quindi nel mio db ho i 3 certificati della chain di gmail. Riprovo a dare il comando di mailx per inviare le mail e, effettivamente, il warning “Error in certificate: Peer’s certificate issuer is not recognized.” è sparito.
Purtroppo però ciò non vuol dire che io possa mettere “-S ssl-verify=strict” in quanto, se lo faccio, la procedura si blocca comunque dando il messaggio:
Comparing DNS name: “smtp.gmail.com”.Peraltro sto usando i certificati in modo improprio, prendendo per buoni quelli che mi fornisce gmail e non andando a verificare per davvero quello della CA che avrei dovuto scaricare da altre fonti.
Spesso mi capita di dover usare mailx da riga di comando per inviare semplici mail di notifica, generalmente all’interno di uno script.
Il pacchetto mailx è questo (in centos 7)
12345678910111213141516171819202122232425262728 ]# yum info mailxInstalled PackagesName : mailxArch : x86_64Version : 12.5Release : 12.el7_0Size : 466 kRepo : installedFrom repo : updatesSummary : Enhanced implementation of the mailx commandURL : http://heirloom.sourceforge.net/mailx.htmlLicense : BSD with advertising and MPLv1.1Description : Mailx is an enhanced mail command, which provides the functionality: of the POSIX mailx command, as well as SysV mail and Berkeley Mail: (from which it is derived).:: Additionally to the POSIX features, mailx can work with Maildir/ e–mail: storage format (as well as mailboxes), supports IMAP, POP3 and SMTP: protocols (including over SSL) to operate with remote hosts, handles mime: types and different charsets. There are a lot of other useful features,: see mailx(1).:: And as its ancient analogues, mailx can be used as a mail script language,: both for sending and receiving mail.:: Besides the “mailx” command, this package provides “mail” and “Mail”: (which should be compatible with its predecessors from the mailx–8.x source),: as well as “nail” (the initial name of this project).
Utilizzando un mail server tipo postfix dall’interno di una rete in cui permetto il relay, per mandare un mail basta il comando:
1 ]# mailx -v -s “Subject” -S smtp=smtp://mailserver.dominio.it -S from=”me@server(Gabriele Merli)” destination.mail@dominio.itIl soggetto sarà “Subject”, il server di posta utilizzato sarà mailserver.dominio.it, il mail del mittente è me@server con nome Gabriele Merli e il destinatario sarà destination.mail@dominio.it
Poi scrivo il testo, termino con un . e la mail viene inviata.
All’interno di uno script con body precompilato basta una cosa del tipo
1 ]# echo “ciao” | mailx -v -s “Subject” -S smtp=smtp://mailserver.dominio.it -S from=”me@server(Gabriele Merli)” destination.mail@dominio.ited il testo del messaggio sarà “ciao”.
Volendo usare GMAIL per inviare la stessa semplicissima mail la questione si complica leggermente.
Il comando da dare è questo:
1 echo “Un caro saluto” | mailx –v –s “Ciao Gabriele” –S smtp–auth=login –S smtp=smtps://smtp.gmail.com:465 –S from=“utente@gmail.com(Gabriele Merli – gmail)” –S smtp–auth–user=utente@gmail.com –S smtp–auth–password=lapassword –S ssl–verify=ignore –S nss–config–dir=~/certs2/ destination.mail@dominio.itI parametri in più servono per effettuare l’autenticazione in fase di invio via smtp e per connettersi al server via ssl.
Questa la man page di mailx riguardo ai parametri sopra indicati
1234 ssl–verifySets the action to be performed if an error occurs during SSL/TLS server certificate validation. Valid values are `strict‘ (fail andclose connection immediately), `ask‘ (ask whether to continue on standard input), `warn’ (print a warning and continue), `ignore‘ (donot perform validation). The default is `ask‘.Nel mio caso ignoro gli errori di validazione del certificato ssl/tls (vedremo poi in seguito)
123 smtp–authSets the SMTP authentication method. If set to `login‘, or if unset and smtp–auth–user is set, AUTH LOGIN is used. If set to `cram–md5‘, AUTH CRAM-MD5 is used; if set to `plain’, AUTH PLAIN is used. Otherwise, no SMTP authentication is performed.L’autenticazione avviene tramite AUTH LOGIN passando poi username (generalmente l’indirizzo email @ gmail.com) e la password
123456 nss–config–dirA directory that contains the files certN.db to retrieve certificates, keyN.db to retrieve private keys, and secmod.db, where N is a digit.These are usually taken from Mozilla installations, so an appropriate value might be `~/.mozilla/firefox/default.clm‘. Mailx opens thesefiles read–only and does not modify them. However, if the files are modified by Mozilla while mailx is running, it will print a `Bad dataâ[mbase‘ message. It may be necessary to create copies of these files that are exclusively used by mailx then. Only applicable if S/MIME andSSL/TLS support is built using Network Security Services (NSS).La directory dove andiamo a memorizzare i certificati (vedremo poi in seguito), nel mio caso ~/certs
Volendo mandare mail utilizzando starttls e la porta 587 (quindi primo collegamento in chiaro e poi si effettua la cifratura), il comando da dare è molto simile a quello visto precedentemente
1 echo “Un caro saluto” | mailx –v –s “Ciao Gabriele” –S smtp–use–starttls –S smtp–auth=login –S smtp=smtp://smtp.gmail.com:587 -S from=”utente@gmail.com(Gabriele Merli – gmail)” -S smtp-auth-user=utente@gmail.com -S smtp-auth-password=lapassword -S ssl-verify=ignore -S nss-config-dir=~/certs2/ destination.mail@dominio.itIn più abbiamo messo l’opzione
123 smtp–use–starttlsCauses mailx to issue a STARTTLS command to make an SMTP session SSL/TLS encrypted. Not all servers support this command; because of commonimplementation defects, it cannot be automatically determined whether a server supports it or notche da il comando STARTTLS.
Ho cambiato la porta di comunicazione(587) e il protocollo (da smtps a smtp)
Se non si specifica una directory in cui sono contenuti i certificati/chiavi nel formato nss (-S nss-config-dir=~/certs/) l’errore sarà
123 220 2.0.0 Ready to start TLSMissing “nss-config-dir” variable.“/home/merli/dead.letter” 11/354e l’email non verrà mandata.
Vediamo ora come crearsi una directory con i certificati che servono per inviare le mail con gmail.
Vado a utilizzare il tool “certutil”
123456789101112131415161718192021222324 ]# which certutil/bin/certutil]# rpm -qf /bin/certutilnss–tools–3.19.1–3.el7_1.x86_64]# yum info nss-toolsInstalled PackagesName : nss–toolsArch : x86_64Version : 3.19.1Release : 3.el7_1Size : 1.8 MRepo : installedFrom repo : updatesSummary : Tools for the Network Security ServicesURL : http://www.mozilla.org/projects/security/pki/nss/License : MPLv2.0Description : Network Security Services (NSS) is a set of libraries designed to: support cross–platform development of security–enabled client and: server applications. Applications built with NSS can support SSL: X.509 v3 certificates, and other security standards.:: Install the nss–tools package if you need command–line tools to: manipulate the NSS certificate and key database.La configurazione di base che possiamo fare è estremamente semplice. Basta infatti creare una directory (nel mio caso ~/certs)
1 utente@client ]# mkdir certse poi lanciare certutil per creare all’interno della directory i database con i certificati e le chiavi (non mettendo password)
1 utente@client: ]# certutil -N -d certs/-N nuova
-d il nome della directory in cui creare il dbAll’interno di certs poi mi troverò 3 file .db (certX.db, keyX.db e secmod.db) che conterranno i vari certificati/chiavi che posso importare.
Visto che, quando mandiamo la mail via gmail e mailx, specifichiamo il parametro
-S ssl-verify=ignore
che di fatto ignora ogni possibile verifica del certificato, questo è tutto quello che dobbiamo fare.
In fase di invio ci sarà un warning di questo tipo
12 Error in certificate: Peer‘s certificate issuer is not recognized.Comparing DNS name: “smtp.gmail.com”ma la mail verrà comunque inviata. Chiaramente se avessi scritto -S ssl-verify=strict questo sarebbe stato un errore che avrebbe fermato la procedura.
Se si vuole evitare di crearsi una cartella (certs) con all’interno i vari database sostanzialmente vuoti, è possibile riciclare quella che già esiste sul sistema se si sta usando firefox.
All’interno della cartella~/.mozilla/firefox/XXXprofile_numberXXXX.default/
ci sono gli stessi identici 3 file di cui sopra (certX.db, keyX.db e secmod.db) che già contengono tutti i certificati dei server che abbiamo accettato durante la navigazione in internet con firefox.
Basterà quindi specificare in mailx il parametro
-S nss-config-dir=~/.mozilla/firefox/XXXprofile_numberXXXX.default/
(dove XXXprofile_numberXXXX è il nome della cartella contenente il nostro profilo).
Nota che mi sembra di aver capito che i certificati delle CA sono hard-coded all’interno dell’eseguibile di firefox e i certificati che vengno aggiunti in questi file .db sono solo quelli accettati dall’utente.
Ora la parte interessante. Come posso far sparire il warning
“Error in certificate: Peer’s certificate issuer is not recognized.” e potenzialmente effetture la verifica “strict” del certificato di gmail?Presumo di aver già creato la directory certs nella home e di aver dato il comando di certutil per creare i 3 file di database (sostanzialmente vuoti) al suo interno.
Ora con il client openssl vado a interrogare smtp.gmail.com per vedere che certificati vengono utilizzati
12345678910111213141516171819202122232425 ]# openssl s_client -connect smtp.gmail.com:465CONNECTED(00000003)depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authorityverify return:1depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CAverify return:1depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2verify return:1depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = smtp.gmail.comverify return:1—–Certificate chain0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.comi:/C=US/O=Google Inc/CN=Google Internet Authority G21 s:/C=US/O=Google Inc/CN=Google Internet Authority G2i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CAi:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority—–Server certificate——–BEGIN CERTIFICATE——–XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX——–END CERTIFICATE——–subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.comissuer=/C=US/O=Google Inc/CN=Google Internet Authority G2Tra le rige —–BEGIN CERTIFICATE—– e —–END CERTIFICATE—– mi trovò il certificato del server. Questo è firmato (Issuer) da “Google Internet Authority” il quale è firmato da “GeoTrust Global” il quale è firmato dalla root CA “Equifax Secure Certificate Authority”. Questi 3 certificati formano la chain che permette al client (conoscendo la CA) di essere sicuro di star parlando proprio con gmail.
Dando lo stesso comando di cui sopra, ma specificando anche -showcerts potrò vedere tutti e 3 i certificati della chain
12345678910111213141516171819202122 ]# openssl s_client -showcerts -connect smtp.gmail.com:465—–Certificate chain0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.comi:/C=US/O=Google Inc/CN=Google Internet Authority G2——–BEGIN CERTIFICATE——–AAAAAAAAAAAAAAAAAAAAAAAAAAAA——–END CERTIFICATE——–1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA——–BEGIN CERTIFICATE——–BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB——–END CERTIFICATE——–2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CAi:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority——–BEGIN CERTIFICATE——–CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC——–END CERTIFICATE——–Ora prendo ciascuna riga compresa tra —–BEGIN CERTIFICATE—– e —–END CERTIFICATE—– (comprese) e creo 3 file (chiamti come voglio, nel mio caso google, geotrust e equifax) contenenti i 3 certificati.
Vado ora ad aggiungere al mio db i 3 certificati appena salvati
123 ]# certutil -A -n “GeoTrust Global CA” -t “TC,,” -d certs -i geotrust]# certutil -A -n “Equifax Secure Certificate Authority” -t “TCP,,” -d certs -i equifax]# certutil -A -n “Google Internet Authority” -t “TC,,” -d certs -i google-A aggiunge
-n è il nickname del certificato che gli asssegno nel db (nel mio caso ho copiato il CN)
-t è la tipologia di certificato (non ho pienamente compreso cosa sia)
123456 · p – Valid peer· P – Trusted peer (implies p)· c – Valid CA· T – Trusted CA (implies c)· C – trusted CA for client authentication (ssl server only)· u – user-d certs la directory che contiene i file del database
-i nome_file il nome del file contenente il certificatoVerifico di aver importato correttamente i 3 certificati dando il comando
12345678 ]# certutil -L -d certsCertificate Nickname Trust AttributesSSL,S/MIME,JAR/XPIGeoTrust Global CA CT,,Google Internet Authority CT,,Equifax Secure Certificate Authority CT,,per curiosità lo stesso comando lo puoi dare sulla directory di mozilla e verificare che i certificati che vedi sono gli stessi che trovi nelle Preferences/Advanced/Certificates/View Certificates/Servers
Ora quindi nel mio db ho i 3 certificati della chain di gmail. Riprovo a dare il comando di mailx per inviare le mail e, effettivamente, il warning “Error in certificate: Peer’s certificate issuer is not recognized.” è sparito.
Purtroppo però ciò non vuol dire che io possa mettere “-S ssl-verify=strict” in quanto, se lo faccio, la procedura si blocca comunque dando il messaggio:
Comparing DNS name: “smtp.gmail.com”.Peraltro sto usando i certificati in modo improprio, prendendo per buoni quelli che mi fornisce gmail e non andando a verificare per davvero quello della CA che avrei dovuto scaricare da altre fonti.
mailx, gmail e certificati – Gabriele Merli
Pages: 1 2