2013-03-30 10 views
7

मैं अपने आईओएस ऐप में रूट सीए (Verisign - http://www.verisign.com/repository/roots/root-certificates/PCA-3G5.pem) की सार्वजनिक कुंजी पिन करना चाहता हूं। सार्वजनिक कुंजी या topicPublicKeyInfo को पिन करना बेहतर है? क्या कोई मुझे बता सकता है कि कौन सी विधि बेहतर है और क्यों?प्रमाणपत्र पिनिंग - केवल सार्वजनिक कुंजी?

उत्तर

4

मैं तर्क दूंगा कि रूट की सीए सार्वजनिक कुंजी के बजाय विषय की सार्वजनिक कुंजी को पिन करना बेहतर होगा। यहाँ सीए के रूट pkey pinning के विभिन्न व्यापार गत की मेरी समझ है:

अच्छा जब तक आप रखें कि एक ही सीए, आप फिर से अधिक से अधिक अपने प्रमाण पत्र को अद्यतन करने में सक्षम हो जाएगा और यह हमेशा काम करेगा।

बुरा मुझे विश्वास है कि आप थोड़ा और अधिक जड़ों pinning एक MITM हमले के लिए असुरक्षित हो के बजाय बजाय विषयों सार्वजनिक कुंजी, जब से तुम के रूप में मान्य किसी भी प्रमाण पत्र है कि सीए द्वारा हस्ताक्षरित ले जाएगा के सीए के pkey, बस होगा जो वास्तव में आपके विषय से मेल खाते हैं।

तब विषय की सार्वजनिक कुंजी को पिन करने के बारे में क्या? असल में आपको सीए की सार्वजनिक कुंजी को पिन करने से थोड़ा अधिक सुरक्षित होना चाहिए, और सर्टिफिकेट की समयसीमा समाप्त होने के बाद भी आपको आवेदन जारी रखना चाहिए और जब तक आप एक ही सार्वजनिक कुंजी बनाए रखते हैं, तब तक आप इसे नवीनीकृत करना चाहिए।

मैं सिर्फ कैसे सार्वजनिक कुंजी पिन करने पर एक प्रश्न और समाधान तैनात, मुझे आशा है कि यह आपकी मदद करता है: How to pin the Public key of a certificate on iOS

1

मैं एक जड़ सीए की सार्वजनिक कुंजी पिन करने के लिए चाहते हैं ...

बस बाइक शेडिंग, लेकिन सर्वर या सेवा के प्रमाणपत्र या सार्वजनिक कुंजी को पिन करने के लिए शायद यह अधिक सुरक्षित है, न कि रूट या इंटरमीडिएट प्रमाणपत्र। यह विशेष रूप से सच है यदि आप सार्वजनिक सीए का उपयोग DigiCert या Verisign (एक निजी, कॉर्पोरेट सीए के विपरीत) के रूप में कर रहे हैं।

सार्वजनिक सीए के मामले में, सीए गलत तरीके से दूसरा प्रमाणपत्र जारी कर सकता है और ग्राहक "वास्तविक" प्रमाण पत्र (आपको जारी किए गए एक को) और "नकली" प्रमाणपत्र (जिसे जारी किया गया) को अलग करने में सक्षम नहीं होंगे गलत रूप से)। यह वास्तविक जीवन में कई बार हुआ है, इसलिए आपको यह फिर से होने की उम्मीद करनी चाहिए।

सार्वजनिक कुंजी या topicPublicKeyInfo को पिन करना बेहतर है? क्या कोई मुझे बता सकता है कि कौन सी विधि बेहतर है और क्यों?

सार्वजनिक कुंजी पिन करना बेहतर है (कम से कम एक सर्वर प्रमाण पत्र पिन करने के मामले में)।

कुछ संगठन, जैसे Google, हर 30 दिनों या उससे भी अधिक अपने सर्वर प्रमाण पत्र घुमाते हैं। हालांकि, वे एक ही सार्वजनिक कुंजी को फिर से प्रमाणित करते हैं। उदाहरण के लिए, Android 4.2 and Pinning देखें। इसका मतलब है कि आप "कुंजी निरंतरता" देखेंगे लेकिन "प्रमाण पत्र निरंतरता" नहीं देखेंगे।

एक ही सार्वजनिक कुंजी को पुन: प्रमाणित करना यही कारण है कि उपयोगकर्ता अनुभव में कुछ मामलों में CertPatrol इतनी खराब हो जाती है। Google सेवाओं जैसे मामलों में हमें वास्तव में एक सार्वजनिक कुंजी गश्ती की आवश्यकता है।

0

यह SPKI (विषय सार्वजनिक कुंजी जानकारी) पिन करने के लिए है क्योंकि यह दोनों वास्तविक सार्वजनिक कुंजी और कुंजी एल्गोरिथ्म (आरएसए, ECDSA, आदि) शामिल हैं बेहतर है। यह https://www.imperialviolet.org/2011/05/04/pinning.html पर गूगल की टीएलएस गुरु से इस लेख में अधिक जानकारी के में वर्णित है:

SPKI सार्वजनिक कुंजी के प्रकार और सार्वजनिक कुंजी के साथ ही साथ कुछ पैरामीटर शामिल हैं। यह महत्वपूर्ण है क्योंकि सार्वजनिक कुंजी पत्तियों को सिर्फ गलत व्याख्याओं के लिए खुले हैं। एक डिफी-हेलमैन सार्वजनिक कुंजी पर विचार करें: यदि कोई व्यक्ति केवल सार्वजनिक कुंजी को पकड़ता है, पूर्ण एसपीकेआई नहीं, तो हमलावर एक ही सार्वजनिक कुंजी का उपयोग कर सकता है लेकिन क्लाइंट को इसे एक अलग समूह में व्याख्या कर सकता है। इसी तरह एक एक DSA कुंजी आदि के रूप में व्याख्या की जा करने के लिए कोई RSA कुंजी के लिए मजबूर कर सकता है

एक iOS एप्लिकेशन के भीतर SPKI पिन कर दिया एक चुनौती यह है कि iOS पर सुरक्षा रूपरेखा को एक प्रमाण पत्र को पार्स और निकालने के लिए एपीआई प्रदान नहीं करता है एसपीकेआई बिट्स (https://nabla-c0d3.github.io/blog/2015/08/11/security-framework-wish-list/)।

अच्छी खबर यह है कि ओपन-सोर्स लाइब्रेरी की तुलना में अच्छी खबर यह है कि: https://github.com/datatheorem/TrustKit

संबंधित मुद्दे