問題が発生した場合にスクリプトを使用して管理者にメールを送信する必要があり、会社ではGmailのみを使用しています。いくつかの投稿手順に従って、.mailrcファイルを使用してmailxを設定することができました。最初にnss-config-dirのエラーがありました。Firefoxディレクトリから.dbファイルをコピーして解決しました。 ./certsに追加し、mailrcでそれを目指します。メールを送信しました。
しかし、上記のエラーが発生しました。奇跡のように、.dbにGoogle証明書がありました。次のコマンドで表示されます:
~]$ certutil -L -d certs
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
GeoTrust SSL CA ,,
VeriSign Class 3 Secure Server CA - G3 ,,
Microsoft Internet Authority ,,
VeriSign Class 3 Extended Validation SSL CA ,,
Akamai Subordinate CA 3 ,,
MSIT Machine Auth CA 2 ,,
Google Internet Authority ,,
ほとんどの場合、メールは機能したため、無視できます。最後に、いくつかの髪と多くのグーグルを引っ張った後、私は自分の煩わしさを取り除く方法を見つけました。
最初に、既存の証明書をASSCIIファイルにエクスポートします。
~]$ certutil -L -n 'Google Internet Authority' -d certs -a > google.cert.asc
次に、そのファイルを再インポートして、SSL証明書の信頼できるものとしてマークします。
~]$ certutil -A -t "C,," -n 'Google Internet Authority' -d certs -i google.cert.asc
この後、リストはそれが信頼できることを示しています:
~]$ certutil -L -d certs
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
...
Google Internet Authority C,,
そして、mailxは問題なく送信します。
~]$ /bin/mailx -A gmail -s "Whadda ya no" [email protected]
ho ho ho
EOT
~]$
私はそれがエラーで行われることを探している誰かに役立つことを願っています。
また、何かに興味があります。
この証明書が偶然mozillaデータベースになかった場合、どうすればこの証明書を取得できますか?たとえば、このようなものはありますか?
~]$ certutil -A -t "C,," \
-n 'gmail.com' \
-d certs \
-i 'http://google.com/cert/this...'
まあそれは私が欲しかった1つのライナーではありませんが、これは証明書をフェッチして最初からインポートする方法です:
# Create a certificate directory
~]$ mkdir certs
# Create a new database in the certs dir
~]$ certutil -N -d certs
# Need now a chain certificate - May 18, 2015
~]$ wget https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.cer
# Need now a chain certificate part 2 - May 18, 2015
~]$ mv GeoTrust_Global_CA.cer certs/
# Fetch the certificate from Gmail, saving in the text file GMAILCERT
# Added the CA opion - May 18, 2015
~]$ echo -n | openssl s_client -connect smtp.gmail.com:465 -CAfile certs/GeoTrust_Global_CA.cer | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > GMAILCERT
# Import the new cert file into the new database in the new dir
~]$ certutil -A -n "Google Internet Authority" -t "C,," -d certs -i GMAILCERT
# Double Check
~]$ certutil -L -d certs
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
Google Internet Authority C,,
やぁ! このチケットの答えに感謝します
この投稿は再度更新する必要があります。 CentOS 7ボックスでのmailxインストールに問題がありました。メールは送信されますが、「認定エラー:ピアの証明書発行者が認識されません」というエラーメッセージが引き続き表示されました。エラー。
私は解決策を見つけました here 、しかしそれを翻訳しなければなりませんでした。
これはquickの方法です:
# Create a certificate directory
mkdir ~/.certs
# Create a new database in the certs dir (dont forget to enter your pass phrase!)
certutil -N -d ~/.certs
# Create three files for the cert chain
touch ~/.certs/google ~/.certs/geotrust ~/.certs/equifax
# Copy the cert chain for smtp.google.com:465 over to my_certs file (don't forget the -showcerts option, CTRL + C to end this command)
openssl s_client -showcerts -connect smtp.gmail.com:465 > ~/.certs/my_certs
次に、-BEGIN CERTIFICATE--および--END CERTIFICATE--を含む各証明書をコピーし、それらを以前に作成したそれぞれのファイル(google、geotrust、equifax)に貼り付けて、これらのファイルを保存します。
# Open your my_certs file you made earlier and copy the google cert (usually the first one)
nano ~/.certs/my_certs
# Open your google file, paste the google cert that you just copied, and save and close
nano ~/.certs/google
# Open your my_certs file you made earlier and copy the geotrust cert (usually the second one)
nano ~/.certs/my_certs
# Open your geotrust file, paste the geotrust cert that you just copied, and save and close
nano ~/.certs/geotrust
# Open your my_certs file you made earlier and copy the equifax cert (usually the third one)
nano ~/.certs/my_certs
# Open your equifax file, paste the equifax cert that you just copied, and save and close
nano ~/.certs/equifax
次に、これらの証明書をそれぞれdbにインポートする必要があります。
# Import the google cert into the db
certutil -A -n "Google Internet Authority" -t "TC,," -d ~/.certs -i ~/.certs/google
# Import the geotrust cert into the db
certutil -A -n "GeoTrust Global CA" -t "TC,," -d ~/.certs -i ~/.certs/geotrust
# Import the equifax cert into the db
certutil -A -n "Equifax Secure Certificate Authority" -t "TCP,," -d ~/.certs -i ~/.certs/equifax
# Double check to make sure everything imported correctly into the db
certutil -L -d ~/.certs
出力例:
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
Google Internet Authority CT,,
GeoTrust Global CA CT,,
Equifax Secure Certificate Authority CT,,
クリーンアップ時間(オプション)
# Remove all unnecessary files since the db has the certs :)
rm -rf ~/.certs/google ~/.certs/geotrust ~/.certs/equifax ~/.certs/my_certs
# Now run a test to make sure mailx is sending correctly now (don't forget to change [email protected] to the email address you'd like to send to)
echo "Your message" | mail -s "Message Subject" [email protected]
「認証のエラー:ピアの証明書発行者が認識されていません」というメッセージは表示されません。もうエラー!
注:
Dirを/certs
から~/.certs
に変更したことに気づいたかもしれません。 mailxはrootとして実行されるため、これらの変更をroot /として実行しました。 「〜/」はHOMEディレクトリがすべてをまとめたことを意味します~/.certs
は/root/.certs/
を意味します。私はあなたがそれを知っていたと確信していますが、誰がこれを読んでいるのかわからない場合に備えてねえ!
これが必要な場合に備えて、/etc/mail.rc
の下部に追加した構成オプションを次に示します
# /etc/mail.rc options added to the bottom
set smtp-use-starttls
set smtp-auth=login
set smtp=smtp://smtp.gmail.com:587
set from="[email protected](Web01 Server)"
set [email protected]
set smtp-auth-password=your.pass
set ssl-verify=ignore
set nss-config-dir=/root/.certs
Your.from.user、your.smtp.user、およびyour.passをそれぞれの変数に変更してください。
このスレッドの返信に基づいて、現在のgmail smtp証明書を自動的にプル、解析、インストールする小さなスクリプトを作成しました。証明書の数が再び変更された場合、それを処理できるはずです。
#!/bin/bash
# This script pulls ssl certs for using gmail smtp. Adapted from the following config explaination:
# https://serverfault.com/questions/498588/smtp-gmail-com-from-bash-gives-error-in-certificate-peers-certificate-issuer
certdirectory="/home/user/.certs"
# Functions
fail() {
ec=$?
[ "${ec}" == "0" ] && ec=1
echo -e "FAILED[code=$ec]: $@"
exit $ec
}
warn(){
echo -e "WARNING $@"
}
cleanup() {
rm allgcert* || warn "Cleanup of files errored"
rm gcert* || warn "Cleanup of files errored"
}
failclean() {
cleanup
fail "$@"
}
# Count number of certs currently being used (can change from time to time)
numcerts=$(echo -n | openssl s_client -showcerts -connect smtp.gmail.com:465 | grep -c "i:")
# Create the certs directory if it does not exist
mkdir -p $certdirectory || fail "Unable to create certificates directory"
# Pull certs to a local file for parsing
echo -n | openssl s_client -showcerts -connect smtp.gmail.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > allgcert || failclean "Unable to pull certs from smtp.gmail.com"
# Parses certs output based on the number of certs, and outputs to individual files
if (($numcerts > 1)) ; then
# Pulls the first cert out as it needs one extra line
sed '1,27!d' allgcert > gcert1
# For subsequent certs, it multiplies the cert number by the number of lines in the file where it should exist
for i in $(seq 2 $numcerts) ; do
sed "$((2 + (((($i - 1)) * 26))))"','"$((1 + (($i * 26))))"'!d' allgcert > gcert${i}
done
fi
# Parses out certificate issuer names for installation
echo -n | openssl s_client -showcerts -connect smtp.gmail.com:465 | grep i: | sed -e 's,.*=,,' > allgcertnames || failclean "Unable to output parsed names for certificates"
for i in $(seq 1 $numcerts) ; do
certutil -A -n "$(sed -n ${i}p allgcertnames)" -t "TC,," -d $certdirectory -i gcert${i} || failclean "Unable to import certificates to database"
done
cleanup