বাশ থেকে smtp.gmail.com দেয় "শংসাপত্রের ত্রুটি: পিয়ার শংসাপত্র জারিকারী স্বীকৃত নয়।"


11

সমস্যা থাকলে আমার প্রশাসককে ইমেল করতে আমার স্ক্রিপ্টের প্রয়োজন ছিল এবং সংস্থাটি কেবল Gmail ব্যবহার করে। কয়েকটি পোস্টের নির্দেশাবলী অনুসরণ করে আমি একটি .mailrc ফাইল ব্যবহার করে মেলেক্স সেট আপ করতে সক্ষম হয়েছি। প্রথমে এনএসএস-কনফিগারেশন-টির এর ত্রুটি ছিল আমি ফায়ার ফক্স ডিরেক্টরি থেকে কিছু .db ফাইল অনুলিপি করে সমাধান করেছি। থেকে ./certs এবং এটি মেলক্রিতে লক্ষ্য করে। একটি মেইল ​​প্রেরণ করা হয়েছিল।

তবে উপরের ত্রুটিটি উঠে এসেছিল। কিছু অলৌকিক ঘটনা দ্বারা, .db এ একটি গুগল শংসাপত্র ছিল। এটি এই আদেশটি দিয়েছিল:

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

সম্ভবত, এটি উপেক্ষা করা যেতে পারে, কারণ মেলটি যাইহোক কাজ করেছিল। অবশেষে কিছু চুল এবং অনেকগুলি গুগল টানার পরে আমি খুঁজে পেলাম কীভাবে নিজেকে বিরক্তি থেকে মুক্তি দেওয়া যায়।

প্রথমে একটি এসএসসিআইআই ফাইলটিতে বিদ্যমান শংসাপত্রটি রফতানি করুন:

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

এখন সেই ফাইলটি পুনরায় আমদানি করুন এবং এসএসএল শংসাপত্রগুলির জন্য এটি বিশ্বস্ত হিসাবে চিহ্নিত করুন, আলা:

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

এবং মেলেক্স কোনও বাধা ছাড়াই প্রেরণ করে।

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

আমি আশা করি এটি ত্রুটি সহকারে করা কারও পক্ষে সহায়ক।

এছাড়াও, আমি কিছুটা সম্পর্কে আগ্রহী am

আমি এই শংসাপত্রটি কীভাবে পেতে পারি, যদি এটি মোজিলা ডাটাবেসে সুযোগ না থাকত? উদাহরণস্বরূপ আছে এখানে কিছু?

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

উত্তর:


13

আমি চাই যে এটি একটি লাইনার নয়, তবে এটি স্ক্র্যাচ থেকে একটি শংসাপত্র আনতে এবং আমদানি করতে হবে:

# 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! এবং এই টিকিটে উত্তরের জন্য ধন্যবাদ


1
আমি আবার একটি ত্রুটি পাচ্ছি, "শংসাপত্রের ত্রুটি: পিয়ারের শংসাপত্র জারিকারী স্বীকৃত নয়"। আমি যে জিমেইল শংসাপত্রটি অন্তর্ভুক্ত করেছি তার মেয়াদ শেষ হয়ে গেছে, দেখে মনে হচ্ছে নতুনটি শৃঙ্খলাবদ্ধ শংসাপত্র। openssl s_client -showcerts -connect smtp.gmail.com:465 </dev/nullতাদের সব দেখতে।
স্পাজম

1
ইস্যুকারীদের সিআর ফাইলটি ডাউনলোড করতে একটি পদক্ষেপ সহ উত্তর আপডেট করুন।
এনডাসুসার্স


7

এই পোস্টটি আবার আপডেট করা প্রয়োজন। আমার সেন্টোস 7 বাক্সে আমার মেইলএক্স ইনস্টল করতে সমস্যা হচ্ছিল। মেল প্রেরণ করবে তবে আমি এখনও "শংসাপত্রের ত্রুটি পেয়েছি: পিয়ার শংসাপত্র জারিকারী স্বীকৃত নয়।" ত্রুটি.

আমি সমাধানটি এখানে পেয়েছি , যদিও এটি অনুবাদ করতে হয়েছিল।

এটি করার জন্য এখানে একটি দ্রুত উপায়:

# 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

এখন - বিগইন শংসাপত্র - এবং - সার্টিফিকেট - সহ প্রতিটি শংসাপত্র অনুলিপি করুন এবং আপনার পূর্বে তৈরি করা তাদের নিজ নিজ ফাইলগুলিতে (গুগল, জিওট্রাস্ট, ইক্যুফ্যাক্স) পেস্ট করুন এবং এখন সেই ফাইলগুলি সংরক্ষণ করুন।

# 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

এখন আমাদের এই শংসাপত্রগুলির প্রতিটি ডিবিতে আমদানি করতে হবে।

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

সময় পরিষ্কার করুন (optionচ্ছিক)

# 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

এটি হওয়া উচিত, আপনার "প্রত্যয়িত ত্রুটি: পিয়ারের শংসাপত্র জারিকারী স্বীকৃত নয় receive আর ত্রুটি!

মন্তব্য:

আপনি লক্ষ্য করে থাকবেন পারে যে আমি থেকে Dir পরিবর্তিত /certsকরতে ~/.certs। মেলএক্স মূল হিসাবে চালায় তাই আমি কেবল এই পরিবর্তনগুলি রুট / হিসাবে তৈরি করেছি। "~ /" এর অর্থ হোম ডিরেক্টরিটি এটিকে একসাথে রাখার ~/.certsঅর্থ /root/.certs/। আমি নিশ্চিত আপনি এটি জানতেন তবে ওহে সেক্ষেত্রে আপনি কখনই জানেন না কে এই পড়ছে!

আপনার যদি এটির প্রয়োজন হয় তবে এখানে কনফিগারেশন বিকল্পগুলি নীচে যুক্ত করেছি added /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

আপনার .from.user, your.smtp.user এবং আপনার.পাসটি তাদের নিজ নিজ ভেরিয়েবলগুলিতে পরিবর্তন করতে ভুলবেন না।


ধন্যবাদ ওপ্টরনগুলি এটি মোহন করার মতো কাজ করেছে, আমি জানি না কেন @ ভারতীয় ব্যবহারকারীরা কাজ করেন নি।
অভিষেক মাধনী

ইমেল সার্ভারগুলি ভারসাম্যপূর্ণ লোড হয় এবং একটি ক্লাস্টার হিসাবে চালিত হলে কেউ কীভাবে সমস্যাটি সমাধান করবেন? উদাহরণস্বরূপ Office 365 শংসাপত্রটি মাঝে মাঝে ত্রুটি পাবে কারণ সংযোগের শেষে সার্ভারটি সংযোগ থেকে সংযোগ থেকে পরিবর্তিত হয়।
ব্র্যাড

এটি আবার -showcertsপুরানো : তিনটি নয়, দুটি শংসাপত্র দেয় The দ্বিতীয়টি একটি গ্লোবাল সাইন। তবুও, এই পদ্ধতিটি কেবলমাত্র কাজ করে, সুতরাং +1: ব্যবহার করুন -showcerts, এতে সমস্ত শংসাপত্রগুলি (বর্তমানে ২) সন্ধান করুন এবং স্বতন্ত্রভাবে এটি ডাটাবেসে আমদানি করুন।
EML

... এবং এটি opensslহিসাবে চালান echo -n | openssl, এটি
ইনপুটটির

@ ইএমএল + বা openssl s_client </dev/null। হ্যাঁ, ২০১ 2017 সালের হিসাবে গুগল (জিমেইল সহ) জিআইটিআরএস / ইক্যুফ্যাক্সের অধীনে জিআইএ 2 থেকে গ্লোবাল সাইন-এর অধীনে জিআইএ 3 তে স্যুইচ করেছে। তবে চেইনের সমস্ত শংসাপত্র সংরক্ষণ করার দরকার নেই। এবং যদি কোনও অপরাধী বা ভণ্ডামি (কোনও নসি সরকারের মতো) জিমেইলটিকে ছদ্মবেশ দেয় তবে এই পদ্ধতিটি কেবল তাদের উপরই ভরসা করে না তবে এটি স্থায়ীভাবে করে - অন্য ব্যবহারকারীদেরকে একটি অবৈধভাবে জারি করা শংসাপত্রের দ্বারা সাময়িকভাবে বোকা বানানো যেতে পারে তবে যখন তা প্রত্যাহার করা হয় তারা এটিকে বিশ্বাস করা বন্ধ করে দেয় যেখানে এই সাথে পদ্ধতিটি আপনি আপনার সমস্ত ইমেল দুষ্কর্মীদের দেওয়া চালিয়ে যান।
dave_thompson_085

0

আমি এই থ্রেডের উত্তরের উপর ভিত্তি করে একটি ছোট স্ক্রিপ্ট তৈরি করেছি, যা স্বয়ংক্রিয়ভাবে বর্তমান জিমেইল এসএমটিপি শংসাপত্রগুলি টান, পার্স এবং ইনস্টল করবে। আবার শংসাপত্রের সংখ্যা পরিবর্তন হলে এটি পরিচালনা করতে সক্ষম হওয়া উচিত।

এখানে সিনট্যাক্স হাইলাইট সহ একটি পেস্টবিন রয়েছে

#!/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

উপরের হিসাবে এটি করা ভুল জিনিস, তবে আপনি যদি এটি করতে চান তবে এক লাইন 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")}'
অবরুদ্ধই

আহ আমি এই স্ক্রিপ্টটি তৈরি করার আগে আপনার মন্তব্যটি দেখিনি। ধন্যবাদ! সম্পাদনা করুন: আপনার ওয়ান-লাইনারটি পুনরায় পড়ার পরে, আমি আমার স্ক্রিপ্ট এবং এটির মধ্যে কোনও ব্যবহারিক পার্থক্য দেখতে পাচ্ছি না। আমি ধরে নিচ্ছি আপনি আমাকে আমার স্ক্রিপ্টের মূলত ওয়ান-লাইন সংস্করণ দিয়েছেন। এটি করার জন্য কি কোনও প্রস্তাবিত "সঠিক উপায়" রয়েছে তাতে স্থায়ী বিশ্বাসের সমস্যা থাকবে না?
পাইরেবল ২
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.