smtp.gmail.com từ bash cung cấp cho Lỗi Lỗi trong chứng chỉ: Công ty phát hành chứng chỉ của Peer không được công nhận.


11

Tôi cần tập lệnh của mình để gửi email cho quản trị viên nếu có vấn đề và công ty chỉ sử dụng Gmail. Theo một vài hướng dẫn bài viết, tôi đã có thể thiết lập mailx bằng tệp .mailrc. Đầu tiên là lỗi của nss-config-dir Tôi đã giải quyết điều đó bằng cách sao chép một số tệp .db từ thư mục firefox. đến ./certs và nhắm đến nó trong mailrc. Một bức thư đã được gửi đi.

Tuy nhiên, lỗi ở trên đã đưa ra. Bằng một phép màu nào đó, đã có chứng chỉ Google trong .db. Nó xuất hiện với lệnh này:

~]$ 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                                    ,,

Nhiều khả năng, nó có thể bị bỏ qua, vì dù sao thư cũng hoạt động. Cuối cùng, sau khi nhổ một ít tóc và nhiều googles, tôi đã tìm ra cách để thoát khỏi sự khó chịu.

Đầu tiên, xuất chứng chỉ hiện có sang tệp ASSCII:

~]$ certutil -L -n 'Google Internet Authority'  -d certs -a > google.cert.asc

Bây giờ nhập lại tệp đó và đánh dấu là tin cậy cho chứng chỉ SSL, ala:

~]$ certutil -A -t "C,," -n 'Google Internet Authority'  -d certs -i google.cert.asc

Sau này, danh sách cho thấy nó đáng tin cậy:

~]$ certutil -L -d certs

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI
...
Google Internet Authority                                    C,,

Và mailx gửi đi mà không gặp trở ngại.

~]$ /bin/mailx -A gmail -s "Whadda ya no" somebody@acompany.com
ho ho ho
EOT
~]$

Tôi hy vọng nó hữu ích cho ai đó muốn được thực hiện với lỗi.

Ngoài ra, tôi tò mò về điều gì đó.

Làm thế nào tôi có thể có được chứng chỉ này, nếu nó không có trong cơ sở dữ liệu mozilla? Có ví dụ, một cái gì đó như thế này?

    ~]$ certutil -A -t "C,," \
                 -n 'gmail.com'  \
                 -d certs \
                 -i 'http://google.com/cert/this...'

Câu trả lời:


13

Chà, đây không phải là lớp lót tôi muốn, nhưng đây là cách tìm nạp và nhập chứng chỉ từ đầu:

# 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,,  

Yaa! và nhờ câu trả lời trên vé này


1
Tôi lại gặp lỗi, "Lỗi trong chứng chỉ: Nhà phát hành chứng chỉ của Peer không được công nhận." Chứng chỉ gmail tôi đã sử dụng đã hết hạn, có vẻ như chứng chỉ mới là chứng chỉ xích. openssl s_client -showcerts -connect smtp.gmail.com:465 </dev/nullđể xem tất cả
spazm

1
Cập nhật câu trả lời với một bước để tải xuống tập tin cer nhà phát hành.
ndasusers

Nhờ vào vé này
ndasusers

7

Bài đăng này cần phải được cập nhật lại. Tôi gặp sự cố với cài đặt mailx trên hộp CentOS 7 của mình. Thư sẽ gửi nhưng tôi vẫn nhận được "Lỗi trong chứng nhận: Công ty phát hành chứng chỉ của Peer không được công nhận." lỗi.

Tôi tìm thấy giải pháp ở đây , phải dịch nó mặc dù.

Đây là một cách nhanh chóng để làm điều đó:

# 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

Bây giờ sao chép từng chứng chỉ bao gồm - BEGIN CHỨNG NHẬN-- và --END CHỨNG NHẬN-- và dán chúng vào các tệp tương ứng mà bạn đã tạo trước đó (google, geotrust, Equachus) và bây giờ lưu các tệp đó.

# 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

Bây giờ chúng ta phải nhập từng certs này vào 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

Ví dụ đầu ra:

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Google Internet Authority                                    CT,,
GeoTrust Global CA                                           CT,,
Equifax Secure Certificate Authority                         CT,,

Dọn dẹp thời gian (tùy chọn)

# 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 yourname@example.com to the email address you'd like to send to)
echo "Your message" | mail -s "Message Subject" yourname@example.com

Đó là như vậy, bạn không nên nhận được "Lỗi trong chứng nhận: Nhà phát hành chứng chỉ của Peer không được công nhận." lỗi nào nữa!

Ghi chú:

Bạn có thể nhận thấy rằng tôi đã thay đổi thư mục từ /certssang ~/.certs. mailx chạy dưới quyền root nên tôi chỉ thực hiện những thay đổi này dưới dạng root /. "~ /" Có nghĩa là thư mục HOME đặt nó tất cả cùng nhau ~/.certsphương tiện /root/.certs/. Tôi chắc chắn bạn biết điều đó nhưng chỉ trong trường hợp bạn không bao giờ biết ai có thể đọc được điều này!

Chỉ trong trường hợp bạn cần điều này, đây là các tùy chọn cấu hình tôi đã thêm vào dưới cùng của /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="your.from.user@gmail.com(Web01 Server)"
set smtp-auth-user=your.smtp.user@gmail.com
set smtp-auth-password=your.pass
set ssl-verify=ignore
set nss-config-dir=/root/.certs

Đảm bảo thay đổi your.from.user, your.smtp.user và your.pass thành các biến tương ứng của chúng.


Cảm ơn opterons điều này hoạt động như bùa mê, tôi không biết tại sao @ndasusers không hoạt động.
Abhishek Madhani

Bất cứ ai cũng biết làm thế nào để giải quyết vấn đề khi các máy chủ email được cân bằng tải và chạy như một cụm? ví dụ: Office 365 Chứng chỉ sẽ liên tục gặp lỗi vì máy chủ ở cuối kết nối thay đổi từ kết nối này sang kết nối khác.
Brad

Điều này đã hết hạn một lần nữa: -showcertsđưa ra hai chứng chỉ, không phải 3. Chứng chỉ thứ hai là chứng chỉ GlobalSign. Tuy nhiên, quy trình này là quy trình duy nhất hoạt động, vì vậy +1: sử dụng -showcerts, tìm tất cả các chứng chỉ trong đó (hiện là 2) và nhập riêng lẻ chúng vào cơ sở dữ liệu.
EML

... và chạy opensslnhư echo -n | openssl, nếu nó bị treo chờ đầu vào
EML

@ EML + hoặc openssl s_client </dev/null. Có, kể từ năm 2017, Google (bao gồm cả gmail) đã chuyển từ GIA2 theo GeoTrust / Equachus sang GIA3 trong GlobalSign. Nhưng không cần phải lưu trữ tất cả các certs của chuỗi. Và nếu bất kỳ tên tội phạm hoặc kẻ mạo danh nào (như chính phủ tọc mạch) mạo danh gmail, phương pháp này không chỉ tin tưởng họ mà còn vĩnh viễn - những người dùng khác có thể bị lừa tạm thời bởi một chứng chỉ được cấp bất hợp pháp nhưng khi bị thu hồi họ sẽ ngừng tin tưởng phương pháp bạn tiếp tục cung cấp tất cả email của bạn cho những kẻ bất lương.
dave_thndry_085

0

Tôi đã tạo một tập lệnh nhỏ, dựa trên các câu trả lời trong chuỗi này, nó sẽ tự động kéo, phân tích cú pháp và cài đặt các certs smtp gmail hiện tại. Nó sẽ có thể xử lý nó nếu số lượng certs thay đổi một lần nữa.

Đây là một pastebin với cú pháp tô sáng là tốt

#!/bin/bash

# This script pulls ssl certs for using gmail smtp. Adapted from the following config explaination:
# /server/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

Như trên đây là điều sai trái, nhưng nếu bạn muốn làm điều đó thì một dòng awk là đủ:openssl s_client </dev/null -showcerts -connect ... | awk '/^ i:/{n=substr($0,7)} /-BEGIN/,/-END/{print>"t"} /-END/{close("t"); system("certutil -A -n \"" n "\" -t TC,, -i t -d certdir || echo failed; rm t")}'
dave_thedom_085

Ah tôi đã không thấy bình luận của bạn trước khi xây dựng kịch bản đó. Cảm ơn! Chỉnh sửa: sau khi đọc lại phần một của bạn, tôi không thấy bất kỳ sự khác biệt thực tế nào giữa tập lệnh của tôi và tập lệnh đó. Tôi giả sử rằng bạn vừa đưa cho tôi về cơ bản phiên bản một tập lệnh của tôi. Có một "cách đúng đắn" được đề xuất để làm điều này sẽ không có vấn đề về niềm tin vĩnh viễn?
pyr0ball
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.