আইওএসে কাজ করতে সিআরএল এবং ওএসসিপি চেকিং কীভাবে পাবেন?


9

আমি আইওএস-এ সিআরএল নিয়ে কাজ করতে পারি না। আমি দুটি পরীক্ষার কেস তৈরি করেছি। আমার কাছে একটি শংসাপত্র রয়েছে যা বৈধ, একটি সিএ দ্বারা জারি করা হয়েছে। আমার কাছে অন্য একটি শংসাপত্র রয়েছে যা বৈধ, একটি সিএ দ্বারা জারি করা হয়েছে, কিন্তু সিএ সেই শংসাপত্রটি তার সিআরএলতে যুক্ত করেছে।

এরপরে আমি একটি প্রত্যাবর্তন নীতি সেটআপ করি যা সিআরএল চেকিং সক্ষম করে এবং প্রয়োজন যে এটি সফল হয়।

func crlValidationTest(trustedCert: SecCertificate, certToVerify: SecCertificate) -> Bool {

    let basicPolicy = SecPolicyCreateBasicX509()

    let crlPolicy = SecPolicyCreateRevocation(kSecRevocationOCSPMethod | kSecRevocationCRLMethod | kSecRevocationRequirePositiveResponse)!

    var trust: SecTrust?

    SecTrustCreateWithCertificates(NSArray(object: certToVerify), NSArray(objects: basicPolicy, crlPolicy), &trust)
    SecTrustSetAnchorCertificates(trust!, NSArray(object: trustedCert))
    SecTrustSetNetworkFetchAllowed(trust!, true)

    var trustResult = SecTrustResultType.invalid

    guard SecTrustEvaluate(trust!, &trustResult) == errSecSuccess else {
        return false
    }

    return trustResult == SecTrustResultType.proceed || trustResult == SecTrustResultType.unspecified
}

আমার প্রত্যাশাটি হ'ল সিআরএল থাকা শংসাপত্রটি অবিশ্বস্ত হবে এবং যে শংসাপত্রটি পরিষ্কার তা বিশ্বাসযোগ্য হবে।

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

রাজ্যের জন্য আপেল ডকুমেন্টেশনSecPolicyCreateRevocation :

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

কেবলমাত্র SecPolicyCreateBasicX509নীতি ব্যবহার করা উভয়কেই সফল হতে দেয় (যখন দ্বিতীয় শংসাপত্রটি ব্যর্থ হওয়া উচিত), তাই অ্যাপলের ডিফল্ট আচরণটি কি আদৌ সিআরএল চেকিং করা না?

আমি চার্লসপ্রক্সিকে আমার ডিভাইসে সংযুক্ত করেছি এবং সমস্ত নেটওয়ার্ক ট্র্যাফিক শোনার সময় কোডটি একাধিকবার চালিয়েছি এবং কোনও আউটবাউন্ড অনুরোধ সিআরএল-এ যায় না যা RequirePositiveResponseপতাকাটি চেক করা অবস্থায় কেন সমস্ত ব্যর্থ হয় তা ব্যাখ্যা করে ।

আমি একটি ব্যবহার করে ডিভাইস থেকে সরাসরি সিআরএল নেভিগেট করার চেষ্টা করেছি এবং URLRequestকোনও সমস্যা ছাড়াই ডিভাইসে সিআরএল ডেটা পেতে সক্ষম হয়েছি।

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

আপডেট তুলনা জন্য, আমি দৌড়েcertutil -f -urlfetch -verify MYCERT.cercertutil ব্যবহার করে, এবং আমি সংযুক্ত বেহালাবাদক কমান্ড চালানোর বাক্সে। আমি প্রত্যাশিত ফলাফল পেয়েছি যা আইওএস আমাকে দিচ্ছে না, এবং আমি সিডিআরএলকে এইচডিটিপি-র মাধ্যমে ফিজারের মাধ্যমে আউটবাউন্ড অনুরোধটি দেখতে পাচ্ছি।

আমি এতে আরও কিছু আগ্রহ তৈরি করতে একটি অনুগ্রহ তৈরি করেছি। আমি প্রত্যাশা করছি যে কারও কি উপরে ভুল করা হচ্ছে বা এই আইওএস এ কেন কাজ করে না সে সম্পর্কে আরও বিশদ রয়েছে।

উত্তর:


7

অ্যাপল প্ল্যাটফর্মে, ক্লায়েন্টরা সিএগুলির শংসাপত্র প্রত্যাহার তালিকা (সিআরএল) পরীক্ষা করে না, না তারা ডিফল্টরূপে ওসিএসপি ব্যবহার করে না।

অ্যাপল প্ল্যাটফর্মগুলি ওসিএসপি স্ট্যাপলিংকে সমর্থন করছে এবং বিকল্পভাবে তারা এমন একটি প্রক্রিয়া সরবরাহ করে যা তারা প্রত্যাহার বর্ধন বলে, যা প্রকৃতপক্ষে একটি ওসিএসপি কলকে ডেকে আনতে পারে, নীচে বিশদটি দেখুন।

ওসিএসপি স্ট্যাপলিং

প্রথমে ওসিএসপি স্ট্যাপলিংয়ের ব্যাখ্যা:

অনলাইন সার্টিফিকেট স্ট্যাটাস প্রোটোকল (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

wireshark

সুতরাং এক্সকোডস কনসোলে একবার দেখে নিচের আউটপুটটি দেখতে পাবেন:

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 )।

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


এখানে দুর্দান্ত তথ্য। চিন্তাশীল উত্তরের জন্য ধন্যবাদ। আমি যেমন এই বিষয়টি নিয়ে গবেষণা চালিয়ে যাচ্ছি আপনার মতোই আমিও দেখেছি, প্রধান ব্রাউজার / ওএস-এর দ্বারা সিআরএল সমর্থন বাদ দেওয়া হচ্ছে এবং ওসিএসপি স্ট্যাপলিং নতুন প্রস্তাবিত সুরক্ষা ব্যবস্থা বলে মনে হচ্ছে। ডাব্লুডাব্লুডিসি ভিডিওতে অ্যাপল প্রতিনিধি বলেছেন: "দুর্ভাগ্যক্রমে আমাদের প্ল্যাটফর্মগুলি ডিফল্টরূপে প্রত্যাহারটি পরীক্ষা করে না"। আমি আমার পরীক্ষাগুলির মাধ্যমে যা পেয়েছি তা হ'ল এটি কেবল ডিফল্টরূপে সমর্থিত নয়, তবে এটি মোটেও সমর্থনযোগ্য নয় (এমনকি আপনি সেটিংসটি জোর করেও) @ স্টিফেন শ্লেচট
ইউনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.