unable to verify the first certificate
শংসাপত্র শৃঙ্খলা অসম্পূর্ণ।
এর অর্থ হ'ল আপনি যে ওয়েবসারভারের সাথে সংযোগ করছেন সেটি ভুল কনফিগার করা হয়েছে এবং এটি আপনাকে প্রেরিত শংসাপত্র শৃঙ্খলে মধ্যবর্তী শংসাপত্রটি অন্তর্ভুক্ত করেনি।
শংসাপত্র শৃঙ্খলা
এটি সম্ভবত নিম্নলিখিত হিসাবে দেখায়:
- সার্ভার শংসাপত্র - মধ্যবর্তী দ্বারা স্বাক্ষরিত একটি শংসাপত্র সংরক্ষণ করে।
- মধ্যবর্তী শংসাপত্র - মূল দ্বারা স্বাক্ষরিত একটি শংসাপত্র সংরক্ষণ করে।
- রুট শংসাপত্র - একটি স্ব-স্বাক্ষরিত শংসাপত্র সংরক্ষণ করে।
মধ্যবর্তী শংসাপত্রটি সার্ভার শংসাপত্রের সাথে সার্ভারে ইনস্টল করা উচিত।
রুট শংসাপত্রগুলি সফ্টওয়্যার অ্যাপ্লিকেশন, ব্রাউজার এবং অপারেটিং সিস্টেমে এম্বেড করা হয়।
শংসাপত্র পরিবেশন করা অ্যাপ্লিকেশনটির সম্পূর্ণ শৃঙ্খলা প্রেরণ করতে হবে, এর অর্থ সার্ভার শংসাপত্র নিজেই এবং সমস্ত মধ্যস্থতাকারী। রুট শংসাপত্রটি ক্লায়েন্টের দ্বারা জানা থাকার কথা।
সমস্যা পুনরুদ্ধার করুন
আপনার ব্রাউজারটি ব্যবহার করে https://incomplete-chain.badssl.com এ যান ।
এটি কোনও ত্রুটি দেখায় না (ঠিকানা বারে প্যাডলক সবুজ)। ব্রাউজারগুলি সার্ভার থেকে প্রেরণ না করা থাকলে চেইনটি সম্পূর্ণ করার প্রবণতা
কারণ এটি।
এখন, নোড ব্যবহার করে https://incomplete-chain.badssl.com এ সংযুক্ত করুন :
// index.js
const axios = require('axios');
axios.get('https://incomplete-chain.badssl.com')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
লগস: " ত্রুটি: প্রথম শংসাপত্রটি যাচাই করতে অক্ষম "।
সমাধান
আপনাকে নিজেরাই শংসাপত্র শৃঙ্খলা সম্পূর্ণ করতে হবে।
এটা করতে:
1:.pem
তারপরে আপনাকে বিন্যাসে অন্তর্বর্তী মাধ্যমিক শংসাপত্রটি পেতে হবে
2 এ: নোডের অন্তর্নির্মিত শংসাপত্রের স্টোর ব্যবহার করে প্রসারিত করুন NODE_EXTRA_CA_CERTS
,
2 বি: বা ব্যবহার করে আপনার নিজস্ব শংসাপত্র বান্ডেল (মধ্যস্থতা এবং মূল) পাস করুন rootca
বিকল্পটি ।
আমি কীভাবে মধ্যবর্তী সার্টিফিকেট পেতে পারি?
ব্যবহার openssl
( উইন্ডোজের জন্য গিটের সাথে আসে) )।
রিমোট সার্ভারের শংসাপত্রের বিবরণ সংরক্ষণ করুন:
openssl s_client -connect incomplete-chain.badssl.com:443 -servername incomplete-chain.badssl.com | tee logcertfile
আমরা ইস্যুকারীকে খুঁজছি (মধ্যবর্তী শংসাপত্রটি সার্ভার শংসাপত্রের ইস্যুকারী / স্বাক্ষরকারী):
openssl x509 -in logcertfile -noout -text | grep -i "issuer"
এটি আপনাকে স্বাক্ষরকারী শংসাপত্রের ইউআরআই দেয়। এটি ডাউনলোড করুন:
curl --output intermediate.crt http://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt
অবশেষে, এটিকে রূপান্তর করুন .pem
:
openssl x509 -inform DER -in intermediate.crt -out intermediate.pem -text
2A। NODE_EXTRA_CERTS
আমি ফাইলের মধ্যে পরিবেশের ভেরিয়েবলগুলি সেট করতে ক্রস-এনভিভ ব্যবহার করছি package.json
:
"start": "cross-env NODE_EXTRA_CA_CERTS=\"C:\\Users\\USERNAME\\Desktop\\ssl-connect\\intermediate.pem\" node index.js"
2b। ca
পছন্দ
এই বিকল্পটি নোডের অন্তর্নির্মিত মূল সিএগুলি ওভাররাইট করতে চলেছে।
এজন্য আমাদের নিজস্ব রুট সিএ তৈরি করতে হবে এসএসএল-রুট-ক্যাস ব্যবহার করুন ।
তারপরে, https
আমাদের শংসাপত্রের বান্ডিল (রুট এবং মধ্যবর্তী) দিয়ে কনফিগার করা একটি কাস্টম এজেন্ট তৈরি করুন । axios
অনুরোধ করার সময় এই এজেন্টটি পাস করুন ।
// index.js
const axios = require('axios');
const path = require('path');
const https = require('https');
const rootCas = require('ssl-root-cas').create();
rootCas.addFile(path.resolve(__dirname, 'intermediate.pem'));
const httpsAgent = new https.Agent({ca: rootCas});
axios.get('https://incomplete-chain.badssl.com', { httpsAgent })
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
একটি কাস্টম https
এজেন্ট তৈরি এবং এটি পাস করার পরিবর্তে axios
, আপনি https
বিশ্বব্যাপী এজেন্টে শংসাপত্রগুলি রাখতে পারেন :
// Applies to ALL requests (whether using https directly or the request module)
https.globalAgent.options.ca = rootCas;
সম্পদ:
- https://levelup.gitconnected.com/how-to-resolve-certificate-errors-in-nodejs-app-involving-ssl-calls-781ce48daded
- https://www.npmjs.com/package/ssl-root-cas
- https://github.com/nodejs/node/issues/16336
- https://www.namecheap.com/support/knowledgebase/article.aspx/9605/69/how-to-check-ca-chain-installation
- /superuser/97201/how-to-save-a-remote-server-ssl-certificate-locally-as-a-file/
- .Crt কে .pem এ রূপান্তর করবেন কীভাবে