🌐 Detecting your location…

কীভাবে ‘SSL শংসাপত্র সমস্যা: স্থানীয় ইস্যুকারী শংসাপত্র পেতে অক্ষম’ ঠিক করবেন

⏱️3 min read  ·  546 words

SSL certificate problem: unable to get local issuer certificateমানে আপনার ক্লায়েন্ট সার্ভারের শংসাপত্র থেকে এটি বিশ্বাস করে এমন একটি শংসাপত্র কর্তৃপক্ষের কাছে বিশ্বাসের একটি চেইন তৈরি করতে পারেনি৷ প্রলোভন যাচাই অক্ষম করা হয়. করবেন না – এটি সম্পূর্ণরূপে বাধার বিরুদ্ধে সুরক্ষা সরিয়ে দেয়। আসল ফিক্স সাধারণত সোজা।

📋 Table of Contents

  1. ত্রুটি মানে কি
  2. কারণ 1: সার্ভার ইন্টারমিডিয়েট পাঠাচ্ছে না
  3. সার্ভারের চেইন সম্পূর্ণ হলে, আপনার স্থানীয় ট্রাস্ট স্টোরটি পুরানো।
  4. অনেক কর্পোরেট নেটওয়ার্ক TLS বাধা দেয়, একটি অভ্যন্তরীণ CA দ্বারা স্বাক্ষরিত তাদের নিজস্ব শংসাপত্র উপস্থাপন করে। ব্রাউজারগুলি কাজ করে কারণ CA ডিভাইস পরিচালনার মাধ্যমে OS স্তরে ইনস্টল করা হয়; কমান্ড-লাইন সরঞ্জাম তাদের নিজস্ব বিশ্বাস দোকানে না.
  5. কার্ল
  6. একটি বিশ্বাস দোকান সমস্যা অনুমান আগে চেক করুন.
  7. — যাচাই রিটার্ন কোড পড়ুন
  8. কারণ শংসাপত্র যাচাইকরণ হল একটি সম্পূর্ণ প্রক্রিয়া যা নেটওয়ার্কে থাকা কাউকে আপনি যে সার্ভারের সাথে কথা বলছেন বলে মনে করেন তার ছদ্মবেশ ধারণ করতে বাধা দেয়৷ এটি অক্ষম করার অর্থ হল যে কোনও মধ্যস্থতাকারী ট্রাফিক পড়তে এবং সংশোধন করতে পারে — শংসাপত্র, টোকেন এবং আপনি যে প্যাকেজগুলি ডাউনলোড করছেন সেগুলি সহ৷
  9. প্রশ্নঃ কেন এটি আমার ব্রাউজারে কাজ করে কিন্তু কার্লে নয়?
  10. উপসংহার

ত্রুটি মানে কি

যখন একটি ক্লায়েন্ট TLS এর মাধ্যমে সংযোগ করে, সার্ভারটি তার শংসাপত্র এবং যেকোনো মধ্যবর্তী শংসাপত্র উপস্থাপন করে। ক্লায়েন্টকে অবশ্যই সেই চেইনটিকে তার স্থানীয় CA স্টোরের একটি বিশ্বস্ত রুটের সাথে লিঙ্ক করতে হবে। একটি লিঙ্ক অনুপস্থিত হলে ত্রুটি দেখা দেয় — হয় সার্ভার মধ্যবর্তী পাঠায়নি, অথবা আপনার স্থানীয় ট্রাস্ট স্টোর অনুপস্থিত বা পুরানো।

চেইন পরিদর্শন করে যা নির্ণয় করুন।

openssl s_client -connect example.com:443 -showcerts </dev/null

# Look for the verification result at the end:
#   Verify return code: 0 (ok)
#   Verify return code: 20 (unable to get local issuer certificate)
#   Verify return code: 21 (unable to verify the first certificate)

রিটার্ন কোড21 সাধারণভাবে মানে সার্ভারের ত্রুটি রয়েছে — এটি তার মধ্যবর্তী শংসাপত্র পাঠায়নি। রিটার্ন কোড20 সাধারণত আপনার স্থানীয় বিশ্বাস দোকান সমস্যা মানে.

কারণ 1: সার্ভার ইন্টারমিডিয়েট পাঠাচ্ছে না

একটি সাধারণ সার্ভার ভুল কনফিগারেশন। ব্রাউজারগুলি প্রায়শই এটি লুকিয়ে রাখে কারণ তারা পূর্ববর্তী ভিজিটগুলি থেকে মধ্যবর্তী ক্যাশে ক্যাশে করে, তাই কার্ল এবং আপনার CI পাইপলাইন ব্যর্থ হওয়ার সময় সাইটটি “ক্রোমে কাজ করে”।

# Count the certificates the server sends
openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null \
  | grep -c "BEGIN CERTIFICATE"
# 1 means only the leaf — the intermediate is missing

আপনি যদি সার্ভার নিয়ন্ত্রণ করেন, সেখানে এটি ঠিক করুন। nginx-এর জন্য সেই ক্রমে একটি ফাইলে পাতা এবং মধ্যবর্তী অংশগুলিকে সংযুক্ত করা প্রয়োজন।

# Correct order: leaf first, then intermediates
cat leaf.crt intermediate.crt > fullchain.crt
server {
    # Use the full chain, not just the leaf certificate
    ssl_certificate     /etc/ssl/certs/fullchain.crt;
    ssl_certificate_key /etc/ssl/private/privkey.key;
}

সার্টবট এরfullchain.pem ইতিমধ্যেই চেইন রয়েছে — nginx-এ ইশারা করছে পরিবর্তে লেটস এনক্রিপ্ট সাইটগুলিতে এই ত্রুটির একক সবচেয়ে ঘন ঘন কারণ।cert.pemকারণ 2: একটি পুরানো বা অনুপস্থিত CA বান্ডেল

সার্ভারের চেইন সম্পূর্ণ হলে, আপনার স্থানীয় ট্রাস্ট স্টোরটি পুরানো।

ন্যূনতম ডকার চিত্রগুলি এই ত্রুটির একটি ঘন ঘন উত্স কারণ সেগুলি কোনও CA বান্ডিল ছাড়াই পাঠানো হয়৷ যোগ করা হচ্ছে

# Debian / Ubuntu
sudo apt update && sudo apt install --reinstall ca-certificates
sudo update-ca-certificates

# RHEL / Fedora
sudo dnf reinstall ca-certificates
sudo update-ca-trust

# Alpine (very common in Docker images)
apk add --no-cache ca-certificates
update-ca-certificates

# macOS
brew install ca-certificates
# or update curl, which bundles its own
brew install curl

ছবিটি সাধারণত এক লাইনে সমাধান করে।ca-certificatesকারণ 3: কর্পোরেট TLS ইন্টারসেপশন

অনেক কর্পোরেট নেটওয়ার্ক TLS বাধা দেয়, একটি অভ্যন্তরীণ CA দ্বারা স্বাক্ষরিত তাদের নিজস্ব শংসাপত্র উপস্থাপন করে। ব্রাউজারগুলি কাজ করে কারণ CA ডিভাইস পরিচালনার মাধ্যমে OS স্তরে ইনস্টল করা হয়; কমান্ড-লাইন সরঞ্জাম তাদের নিজস্ব বিশ্বাস দোকানে না.

সমাধান হল প্রাসঙ্গিক ট্রাস্ট স্টোরে কর্পোরেট রুট CA যুক্ত করা — যাচাইকরণ অক্ষম করা নয়।

আপনার আইটি ডিপার্টমেন্টকে অফিসিয়াল রুট CA ফাইলের জন্য জিজ্ঞাসা করুন যেখানে সম্ভব সেখানে নিজে এক্সট্র্যাক্ট করার চেয়ে — একটি লাইভ সংযোগ থেকে এক্সট্র্যাক্ট করা অনুমান করে যে সংযোগটি ইতিমধ্যেই আপস করা হয়নি।

# Capture the certificate the proxy is presenting
openssl s_client -showcerts -connect example.com:443 </dev/null \
  | openssl x509 -outform PEM > corp-ca.crt

# Inspect it to confirm what it is
openssl x509 -in corp-ca.crt -noout -subject -issuer -dates

# Install system-wide (Debian/Ubuntu)
sudo cp corp-ca.crt /usr/local/share/ca-certificates/corp-ca.crt
sudo update-ca-certificates

প্রতি-টুল ফিক্সেস

কার্ল

গিট

# Point at a specific bundle
curl --cacert /path/to/ca-bundle.crt https://example.com

# Or set it for the session
export CURL_CA_BUNDLE=/path/to/ca-bundle.crt

এই ত্রুটির জন্য প্রতিটি অনুসন্ধান ফলাফলে প্রদর্শিত হবে. এটি স্থায়ীভাবে আপনার ক্লোন করা প্রতিটি হোস্টের জন্য শংসাপত্র যাচাইকরণ অক্ষম করে। এটা ব্যবহার করবেন না।

# Correct fix: point Git at a valid bundle
git config --global http.sslCAInfo /path/to/ca-bundle.crt

# Scope it to one host if only that host is affected
git config --global http."https://internal.company.com/".sslCAInfo /path/to/corp-ca.crt

git config --global http.sslVerify falseNode.js

যাচাইকরণ প্রক্রিয়া-ব্যাপী নিষ্ক্রিয় করে এবং নোড ঠিক এটি বলে একটি সতর্কতা প্রিন্ট করে। এটি একটি নিক্ষেপকারী স্থানীয় পরীক্ষায় গ্রহণযোগ্য এবং অন্য কোথাও নয়।

# Add a CA to Node's trust store for this process
export NODE_EXTRA_CA_CERTS=/path/to/corp-ca.crt
node app.js
// Or per-request, which is more precise
import https from 'node:https';
import fs from 'node:fs';

const agent = new https.Agent({
  ca: fs.readFileSync('/path/to/corp-ca.crt'),
});

await fetch('https://internal.example.com', { agent });

NODE_TLS_REJECT_UNAUTHORIZED=0পাইথন

ডকার

import certifi, requests

# Use certifi's bundle explicitly
requests.get('https://example.com', verify=certifi.where())

# Or a corporate CA
requests.get('https://internal.example.com', verify='/path/to/corp-ca.crt')
# Environment variables respected by requests and urllib3
export REQUESTS_CA_BUNDLE=/path/to/ca-bundle.crt
export SSL_CERT_FILE=/path/to/ca-bundle.crt

# Keep certifi current
pip install --upgrade certifi

কারণ 4: শংসাপত্রের মেয়াদ শেষ হয়ে গেছে

FROM node:22-alpine

# Alpine ships without a CA bundle
RUN apk add --no-cache ca-certificates

# Add a corporate CA if you are behind interception
COPY corp-ca.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates

ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt

একটি বিশ্বাস দোকান সমস্যা অনুমান আগে চেক করুন.

ক্লায়েন্টের ঘড়িও যাচাই করুন। একটি খারাপভাবে ভুল তারিখ সহ একটি মেশিন বৈধ শংসাপত্রগুলিকে এখনও বৈধ নয় বা মেয়াদোত্তীর্ণ হিসাবে প্রত্যাখ্যান করে এবং এটি স্থগিত করা পাত্র এবং ভার্চুয়াল মেশিনগুলিকে ধরে ফেলে৷

echo | openssl s_client -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -dates
# notBefore=...
# notAfter=...

ডায়গনিস্টিক সিকোয়েন্স

date
timedatectl status    # Linux

— যাচাই রিটার্ন কোড পড়ুন

  1. openssl s_client -connect host:443 -showcertsপ্রেরিত শংসাপত্র গণনা. এক মানে সার্ভারে একটি অনুপস্থিত মধ্যবর্তী.
  2. মেয়াদ শেষ হওয়ার তারিখ এবং স্থানীয় সিস্টেম ঘড়ি পরীক্ষা করুন।
  3. অন্য মেশিন বা নেটওয়ার্কের সাথে তুলনা করুন – যদি এটি সেখানে কাজ করে তবে সমস্যাটি স্থানীয়।
  4. ইস্যুকারী আপনার কর্পোরেট CA কিনা তা পরীক্ষা করুন, যা বাধা নির্দেশ করে।
  5. আপডেট
  6. এবং কোনো ভাষা-নির্দিষ্ট বান্ডিল।ca-certificatesকেন শুধু যাচাইকরণ অক্ষম করবেন না

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

বাস্তবসম্মত ঝুঁকি তাত্ত্বিক নয়। যাচাইকরণ অক্ষম সহ একটি CI পাইপলাইন আনন্দের সাথে একটি ছদ্মবেশী রেজিস্ট্রি থেকে একটি প্যাকেজ ইনস্টল করবে৷ ফিক্স মিনিট লাগে; এটি এড়িয়ে যাওয়ার পরিণতি একটি আপস বিল্ড হতে পারে.

প্রায়শই জিজ্ঞাসিত প্রশ্ন

প্রশ্নঃ কেন এটি আমার ব্রাউজারে কাজ করে কিন্তু কার্লে নয়?

উত্তর: ব্রাউজারগুলি পূর্ববর্তী সংযোগগুলি থেকে মধ্যবর্তী শংসাপত্রগুলি ক্যাশে করে এবং হারিয়ে যাওয়াগুলি স্বয়ংক্রিয়ভাবে আনতে পারে৷ কার্ল উভয়ই করে না, তাই এটি একটি সার্ভার-সাইড চেইন সমস্যা প্রকাশ করে যা ব্রাউজারগুলি লুকিয়ে রাখে।
প্রশ্ন: ত্রুটি 20 এবং ত্রুটি 21 এর মধ্যে পার্থক্য কী?

A: 21 মানে ক্লায়েন্ট প্রথম শংসাপত্রটি যাচাই করতে পারেনি, সাধারণত মধ্যবর্তীদের পাঠানো হয়নি। 20 মানে আপনার স্থানীয় ট্রাস্ট স্টোরে ইস্যুকারী পাওয়া যায়নি।
প্রশ্ন: আমার সিস্টেমে CA বান্ডেল কোথায়?

প্রশ্ন: আমার সিস্টেমে CA বান্ডেল কোথায়?
উঃ সাধারণত/etc/ssl/certs/ca-certificates.crt ডেবিয়ান এবং উবুন্টুতে,/etc/pki/tls/certs/ca-bundle.crt RHEL-এ। পাইথনে,python -m certifi পাথ সার্টিফাই ব্যবহার করে প্রিন্ট করে।

প্রশ্ন: শুধুমাত্র স্থানীয় উন্নয়নের জন্য যাচাইকরণ অক্ষম করা কি নিরাপদ?
উত্তর: একটি স্ব-স্বাক্ষরিত শংসাপত্র সহ একটি স্থানীয় সার্ভারের জন্য, পরিবর্তে আপনার ট্রাস্ট স্টোরে সেই শংসাপত্রটি যোগ করুন — এটি একই পরিমাণ সময় নেয় এবং এমন একটি অভ্যাস তৈরি করে না যা আপনাকে উত্পাদন কনফিগারেশনে অনুসরণ করে।

প্রশ্ন: আমার সিআই কাজ করে কিন্তু উৎপাদন ব্যর্থ হয়। কেন?
একটি: বেস ইমেজ প্রায় সবসময় একটি পার্থক্য. স্লিম এবং আলপাইন ছবি প্রায়ই বাদ দেয়ca-certificates সম্পূর্ণরূপে

উপসংহার

এই ত্রুটি মানে বিশ্বাসের শৃঙ্খল ভেঙে গেছে, এবং শুধুমাত্র কয়েকটি কারণ রয়েছে:সার্ভার তার মধ্যবর্তী শংসাপত্র পাঠাচ্ছে না, আপনার স্থানীয় CA বান্ডেলটি অনুপস্থিত বা পুরানো, একটি কর্পোরেট প্রক্সি তার নিজস্ব CA-এর সাথে TLS-কে বাধা দিচ্ছে, বা একটি শংসাপত্রের মেয়াদ শেষ হয়ে গেছে৷ দিয়ে নির্ণয় করুনopenssl s_client এবং রিটার্ন কোড যাচাই করুন, তারপর আসল কারণ ঠিক করুন — CA ইনস্টল করুন, আপডেট করুনca-certificates, অথবা সম্পূর্ণ চেইন পরিবেশন করুন. থ্রোওয়ে স্থানীয় পরীক্ষার বাইরে যাচাইকরণ কখনই অক্ষম করবেন না, কারণ এটি প্রদানের জন্য ত্রুটিটি বিদ্যমান সুরক্ষা সরিয়ে দেয়।

MD Rafikul Islam

Written by

MD Rafikul Islam is a software developer and the editor of TechPulse. He writes about developer tooling, hardware, and the practical decisions that come up in day-to-day engineering work — which laptop to buy, which framework to commit to, why a build broke at 2am. He tests the tools he writes about and says plainly when something is not worth the money. Corrections and corrections requests are welcome at rony.yf25@gmail.com.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা