অ্যাপল প্ল্যাটফর্মে, ক্লায়েন্টরা সিএগুলির শংসাপত্র প্রত্যাহার তালিকা (সিআরএল) পরীক্ষা করে না, না তারা ডিফল্টরূপে ওসিএসপি ব্যবহার করে না।
অ্যাপল প্ল্যাটফর্মগুলি ওসিএসপি স্ট্যাপলিংকে সমর্থন করছে এবং বিকল্পভাবে তারা এমন একটি প্রক্রিয়া সরবরাহ করে যা তারা প্রত্যাহার বর্ধন বলে, যা প্রকৃতপক্ষে একটি ওসিএসপি কলকে ডেকে আনতে পারে, নীচে বিশদটি দেখুন।
ওসিএসপি স্ট্যাপলিং
প্রথমে ওসিএসপি স্ট্যাপলিংয়ের ব্যাখ্যা:
অনলাইন সার্টিফিকেট স্ট্যাটাস প্রোটোকল (OCSP) ব্যবহারের stapling , আনুষ্ঠানিকভাবে নামে পরিচিত TLS সার্টিফিকেট স্থিতি অনুরোধ এক্সটেনশন, X.509 ডিজিটাল সার্টিফিকেট প্রত্যাহার স্থিতির চেক করার জন্য একটি মান। 1 এটি শংসাপত্রের উপস্থাপককে প্রয়োজনীয় শুরুর মাধ্যমে সিএ দ্বারা স্বাক্ষরিত একটি টাইম-স্ট্যাম্পড ওসিএসপি প্রতিক্রিয়া সংযোজন ("স্ট্যাপলিং") দ্বারা অনলাইন শংসাপত্রের স্ট্যাটাস প্রোটোকল (ওসিএসপি) প্রতিক্রিয়া সরবরাহের সাথে জড়িত সম্পদ ব্যয় বহন করার অনুমতি দেয় need সুরক্ষা এবং কর্মক্ষমতা উভয়ই উন্নত করার লক্ষ্যে ক্লায়েন্টদের সিএর সাথে যোগাযোগ করার জন্য।
দেখতে https://en.wikipedia.org/wiki/OCSP_stapling
ওসিএসপি এবং ওসিএসপি স্টাপলিংয়ের মধ্যে পার্থক্য
কোনও ক্লায়েন্ট যদি একটি traditionalতিহ্যবাহী ওসিএসপি প্রবাহে কোনও সার্ভারের সাথে সংযোগ করে এবং শংসাপত্রটি পুনরুদ্ধার করে তবে এটি পরীক্ষা করে প্রাপ্ত শংসাপত্রটি সিএতে অনুরোধ করে বাতিল করা হয়েছে কিনা তা পরীক্ষা করে। এর কিছু অসুবিধাগুলি রয়েছে, উদাহরণস্বরূপ, একটি অতিরিক্ত নেটওয়ার্ক সংযোগ প্রয়োজন, তথ্যটি এনক্রিপ্ট করা নেই এবং তাই একটি ডেটা গোপনীয়তার সমস্যা উপস্থাপন করে।
ওসিএসপি স্ট্যাপলিংয়ের মাধ্যমে সার্ভারটি সিএ থেকে স্বাক্ষরিত প্রত্যাহার তথ্যের জন্য অনুরোধ করে এবং এটি টিএলএস হ্যান্ডশেকে যুক্ত করে।
এর অর্থ হ'ল ওসিএসপি স্ট্যাপলিং ব্যবহার করার সময়, আপনি আইওএস থেকে কোনও সিএ সার্ভারে একটি ওসিএসপি অনুরোধ দেখতে পাবেন না।
ওসিএসপি স্ট্যাপলিংয়ের ত্রুটি
আপনি যে সার্ভারের সাথে সংযোগ করছেন সেটি অবশ্যই ওসিএসপি স্ট্যাপলিং সমর্থন করবে। এটি দূষিত সার্ভারগুলির বিরুদ্ধেও সুরক্ষা দেয় না।
সে কারণেই অ্যাপল একটি প্রত্যাহার বর্ধন সরবরাহ করছে reasons
অ্যাপলের প্রত্যাহার বর্ধন
এখানে কিভাবে এটা কাজ করে:
- শংসাপত্র ট্রান্সপনারসি লগ এন্ট্রি অ্যাপল দ্বারা সংগ্রহ করা হয়
- এই তথ্যের সাথে অ্যাপল সিএএস থেকে প্রত্যাহার সম্পর্কে তথ্য সংগ্রহ করে
- এই একীভূত তথ্যটি স্বয়ংক্রিয়ভাবে নিয়মিত সমস্ত অ্যাপল ক্লায়েন্টদের কাছে সরবরাহ করা হয়
- এই তথ্যের উপর ভিত্তি করে, যখন কোনও আইওএস অ্যাপ্লিকেশন বাতিল হওয়া শংসাপত্রের সাথে সার্ভারের সাথে সংযোগ স্থাপনের চেষ্টা করে, এটি ওসিএসপি এর মাধ্যমে একটি অতিরিক্ত চেক করে।
প্রয়োজন
এটি সমর্থন করার জন্য কোনও অ্যাপের একমাত্র প্রয়োজন হ'ল ব্যবহৃত সার্ভার শংসাপত্রটি একটি শংসাপত্রের স্বচ্ছতা লগতে যুক্ত করা উচিত। সাধারণত একটি সিএ ইতিমধ্যে তা করে তবে আপনার পরীক্ষা করা উচিত যে ডোমেন শংসাপত্রটি সার্বজনীন শংসাপত্রগুলির জন্য সক্রিয় স্বচ্ছতার লগগুলিতে রয়েছে, যেমন নীচের লিঙ্কটি ব্যবহার করে: https://transpenderreport.google.com/https/cerર્ટates
ডাব্লুডাব্লুডিসি 2017, সেশন 701
এখানে একটি দুর্দান্ত ডাব্লুডাব্লুডিসি অধিবেশন রয়েছে যাতে এই বিষয় এবং অ্যাপলের উদ্দেশ্যগুলি বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে: ডাব্লুডাব্লুডিসি 2017, সেশন 701: https://developer.apple.com/videos/play/wwdc2017/701/
প্রায় 12 মিনিটের দিকে অ্যাপল ইঞ্জিনিয়ার পুরো প্রত্যাহার বিষয়টিকে বিশদভাবে ব্যাখ্যা করেন। প্রায় সাড়ে ১৫ টার দিকে তিনি ব্যাখ্যা করেছেন যে সাধারণ ওসিএসপি অতিরিক্ত অতিরিক্ত API ব্যবহারের প্রয়োজন হবে।
আইওএসে ওসিএসপি স্ট্যাপলিংয়ের পরীক্ষা
পরীক্ষার জন্য আমাদের এমন একটি সার্ভার দরকার যা
ওসিএসপি স্ট্যাপলিং সমর্থন করে এবং একটি প্রত্যাহার করা শংসাপত্র ব্যবহার করে: https://revoke.grc.com (এই সার্ভারফাল্ট উত্তরটিতে এই সার্ভারটি পেয়েছে: https://serverfault.com/a/645066 )
তারপরে আমরা একটি ছোট পরীক্ষা প্রোগ্রামের সাহায্যে আইওএস থেকে সংযোগ দেওয়ার চেষ্টা করতে পারি যা এইচটিএমএল প্রতিক্রিয়া ডাউনলোড করার চেষ্টা করে এবং এটিকে কনসোলে আউটপুট দেয়।
উপরে উল্লিখিত ডাব্লুডাব্লুডিসি অধিবেশন থেকে প্রাপ্ত তথ্যের ভিত্তিতে সংযোগের প্রচেষ্টা ব্যর্থ হওয়া উচিত।
...
let session = URLSession(configuration: .default)
...
func onDownloadAction() {
let url = URL(string: "https://revoked.grc.com")!
self.download(from: url) { (result, error) in
if let result = result {
print("result: " + result)
} else {
print("download failed")
if let error = error {
print("error: \(error)")
}
}
}
}
func download(from url: URL, completion: @escaping(String?, Error?)->Void) {
let dataTask = self.session.dataTask(with: url) { data, response, error in
guard let data = data else {
if let error = error {
completion(nil, error)
return
}
completion(nil, NSError(domain: "DownloadFailure", code: 0, userInfo:nil))
return
}
guard let response = response as? HTTPURLResponse else {
completion(nil, NSError(domain: "ResponseFailure", code: 0, userInfo:nil))
return
}
print("http status: \(response.statusCode)")
let res = String(bytes: data, encoding: .utf8)
completion(res, nil)
}
dataTask.resume()
}
আমরা যদি আইওএস সিমুলেটারে উপরের রুটিনটি সম্পাদন করি, তবে সিএ স্বাক্ষরিত কোনও টাইম-স্ট্যাম্পড ওসিএসপি প্রতিক্রিয়া টিএলএস হ্যান্ডশেকটিতে স্থির হয়েছে কিনা তা পরীক্ষা করতে আমরা ওয়্যারশার্ক ব্যবহার করতে পারি।
সঙ্গে nslookup revoked.grc.com
আমরা সার্ভারের IP ঠিকানা পেতে এবং সঙ্গে Wireshark মধ্যে ফিল্টার করতে পারেন ip.addr==4.79.142.205
।
স্ক্রিনশটে একজন দেখতে পাবে, শংসাপত্রটির স্থিতি রয়েছে revoked
।
সুতরাং এক্সকোডস কনসোলে একবার দেখে নিচের আউটপুটটি দেখতে পাবেন:
2019-10-12 21:32:25.734382+0200 OCSPTests[6701:156558] ATS failed system trust
2019-10-12 21:32:25.734526+0200 OCSPTests[6701:156558] Connection 1: system TLS Trust evaluation failed(-9802)
2019-10-12 21:32:25.734701+0200 OCSPTests[6701:156558] Connection 1: TLS Trust encountered error 3:-9802
2019-10-12 21:32:25.734787+0200 OCSPTests[6701:156558] Connection 1: encountered error(3:-9802)
2019-10-12 21:32:25.737672+0200 OCSPTests[6701:156558] Task <12408947-689F-4537-9642-C8F95E86CA62>.<1> HTTP load failed, 0/0 bytes (error code: -1200 [3:-9802])
download failed
error: Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x6000037f8510>, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, NSErrorPeerCertificateChainKey=(
"<cert(0x7fda78828200) s: revoked.grc.com i: DigiCert SHA2 Secure Server CA>",
"<cert(0x7fda7882b200) s: DigiCert SHA2 Secure Server CA i: DigiCert Global Root CA>"
), NSUnderlyingError=0x600000be9170 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x6000037f8510>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=(
"<cert(0x7fda78828200) s: revoked.grc.com i: DigiCert SHA2 Secure Server CA>",
"<cert(0x7fda7882b200) s: DigiCert SHA2 Secure Server CA i: DigiCert Global Root CA>"
)}}, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSErrorFailingURLKey=https://revoked.grc.com/, NSErrorFailingURLStringKey=https://revoked.grc.com/, NSErrorClientCertificateStateKey=0}
আইওএস একটি টিএলএস ত্রুটির সাথে সার্ভারের সাথে সংযোগ স্থাপনের প্রচেষ্টাটি বাতিল করে দেয়।
পরীক্ষা বাতিল হয়েছে
revused.badssl.com ওসিএসপি স্ট্যাপলিং সমর্থন করে না।
আমরা যদি https://revoked.badssl.com এর শংসাপত্রের বিশদটি একবার দেখে নিই তবে আমরা এটি জানতে পারি:
যদি কেউ .crl ফাইল (2.5MB) ডাউনলোড করে এবং একটি
openssl crl -inform DER -text -in ssca-sha2-g6.crl | grep 0371B58A86F6CE9C3ECB7BF42F9208FC
কেউ দেখতে পাবে যে এই শংসাপত্রটি সিআরএল-এর মাধ্যমে প্রত্যাহার করা হয়েছে।
মজার বিষয় হল, সাফারি বা ক্রোম বা আইওএস কেউই এই বাতিল হওয়া স্থিতিকে স্বীকৃতি দেয় না। কেবল মোজিলা ফায়ারফক্স একটি ত্রুটি বার্তা প্রদর্শন করে ( পিয়ার শংসাপত্র প্রত্যাহার করা হয়েছে Error ত্রুটি কোড: SEC_ERROR_REVOKED_CERTIFICATE )।
কারণটি হতে পারে যে শংসাপত্রটি কয়েক দিন আগেই পুনর্নবীকরণ করা হয়েছিল এবং তাই ব্রাউজার এবং অপারেটিং সিস্টেমের সমস্ত স্থানীয় প্রত্যাহার তালিকার পক্ষে এখনও খুঁজে পায়নি।