2012-04-20 20 views
13

सबसे पहले, कृपया ध्यान दें कि मैं SSL को कॉन्फ़िगर करने के लिए नया हूं। अतीत में, मैं हमेशा भाग्यशाली रहा हूं कि आईटी विभाग को समय से पहले मेरे लिए सेट अप किया जाए। इसलिए संभावना के लिए तैयार रहें कि मुझे आपके कुछ उत्तरों पर स्पष्टीकरण मांगने की आवश्यकता हो सकती है। =)अपाचे मेरे एसएसएल क्लाइंट सर्टिफिकेट का अनुरोध नहीं करेगा

क्या मैं

करना मैं स्थापन कर रहा हूँ कर्मचारियों के लिए एक कंपनी के इंट्रानेट वेबसाइट की कोशिश कर रहा हूँ। उदाहरण के लिए, एक ब्राउज़र प्रारंभ पृष्ठ होगा जो प्रत्येक कर्मचारी के लिए अनुकूलित सामग्री दिखाता है। इस प्रकार, मुझे किसी भी उपयोगकर्ता नाम/पासवर्ड या अन्य संकेत की आवश्यकता के बिना कहा कर्मचारी को पहचानने में सक्षम होना चाहिए (एक बार सेटअप ठीक है हालांकि; मैं नहीं चाहता कि उन्हें हर बार संकेत दिया जाए)। स्वाभाविक रूप से, एसएसएल ऐसा करने के लिए जाने का सबसे अच्छा तरीका प्रतीत होता है।

मेरे पास "उपयोगकर्ता" खातों को SSL_CLIENT_M_SERIAL और SSL_CLIENT_I_DN से संबद्ध करने के लिए एक MySQL डेटाबेस सेटअप होगा, जो मुझे लगता है कि प्रत्येक क्लाइंट प्रमाणपत्र (?) के लिए अद्वितीय होगा। मुझे इस आलेख से यह विचार मिला: http://cweiske.de/tagebuch/ssl-client-certificates.htm

पहली बार उपयोगकर्ता आंतरिक वेबसाइट पर जाता है, उनके पास प्रमाणपत्र नहीं होगा (मैं उन्हें क्लाइंट के लिए मैन्युअल रूप से उत्पन्न नहीं करना चाहता!), इस मामले में $ _SERVER ["SSL_CLIENT_VERIFY"] == "नहीं"। यदि ऐसा होता है, तो यह उपयोगकर्ता खाता सेटअप पृष्ठ पर जाएगा, जिसमें एक चरण शामिल होगा जहां PHP एक SSL क्लाइंट प्रमाणपत्र उत्पन्न करता है और उपयोगकर्ता को इंस्टॉल करने के लिए ब्राउज़र पर भेजता है। अच्छा और सरल उपयोगकर्ता तब प्रमाणपत्र स्थापित करता है, एसोसिएशन बनाया जाता है, और ब्राउज़र को पुनरारंभ करने के बाद (अच्छे उपाय के लिए), उपयोगकर्ता आंतरिक वेबसाइट पर वापस जाता है।

इस बिंदु पर, अपाचे को क्लाइंट प्रमाणपत्र का अनुरोध करना चाहिए, जिसे ब्राउजर भेजता है। PHP स्क्रिप्ट फिर आवश्यक $ _SERVER चर का विश्लेषण करता है, MySQL डेटाबेस के विरुद्ध तुलना करता है, और अच्छे समय सभी के पास होते हैं। फिर, अच्छा और सरल।

कि क्या कारगर है अब तक

मैं सर्वर साइड प्रमाणपत्र इंस्टॉल। और हाँ, वे स्वयं हस्ताक्षरित हैं (स्पष्ट कारणों से)। अपाचे में mod_ssl इंस्टॉल है और यह सब ठीक काम कर रहा है। मैंने एक PHP स्क्रिप्ट बनाई है जो केवल $ _SERVER सरणी को डंप करती है, और सभी SSL_SERVER_ * कुंजी मान उस प्रमाणपत्र से मेल खाते हैं जो मैंने इसके लिए बनाया था।

समस्या

मैं क्लाइंट प्रमाण पत्र काम करने के लिए नहीं मिल सकता है! उसी PHP स्क्रिप्ट में, कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, SSL_CLIENT_VERIFY == "नहीं" और अन्य SSL_CLIENT_ * कुंजी गुम हैं। यह तब होता है जब मेरे पास SSLVerifyClient ssl.conf में वैकल्पिक पर सेट हो। मैंने जो भी ट्यूटोरियल पढ़ा है, उनके अनुसार, वे सभी कहते हैं कि वेबसर्वर को ब्राउज़र प्रमाण पत्र के लिए ब्राउज़र से पूछना चाहिए। बात यह है कि, मैं इसे करने के लिए नहीं मिल सकता! यह सीधे PHP स्क्रिप्ट पर जाता है और मानता है कि मेरे पास कोई क्लाइंट प्रमाणपत्र नहीं है। यह फ़ायरफ़ॉक्स, क्रोम, और आईई में होता है।

इसलिए मैंने SSLVerifyClient को वेब सर्वर पर आवश्यक और पुनरारंभ करने की कोशिश की। उस विकल्प के साथ, मैं एक एसएसएल कनेक्शन भी स्थापित नहीं कर सकता। फ़ायरफ़ॉक्स बस कहता है कि कनेक्शन रीसेट कर दिया गया है (अन्य ब्राउज़र भी उस त्रुटि के अपने संस्करण प्रदर्शित करते हैं)। अजीब बात यह है कि लॉग इन कनेक्शन प्रयासों पर कोई गतिविधि नहीं दिखाते हैं! अर्थात। access_log, error_log, ssl_access_log, ssl_error_log, और ssl_request_log सभी कोई भी नहीं दिखाते; ऐसा लगता है कि प्रयास कभी भी नहीं हुआ। यह निराशाजनक है क्योंकि इसका मतलब है कि मेरे पास काम करने के लिए एक त्रुटि संदेश भी नहीं है। बस एक वेबसर्वर निष्क्रिय-आक्रामक रूप से मुझे नरक में जाने के लिए कह रहा है।

मैंने PHP के ओपनएसएसएल एक्सटेंशन का उपयोग करके मैन्युअल रूप से अपना खुद का क्लाइंट प्रमाणपत्र बनाने/स्थापित करने का प्रयास किया। सर्टिफिकेट बस ठीक है, हालांकि मुझे उस प्रमाणपत्र को सर्वर के साथ संबद्ध करने के बारे में कोई जानकारी नहीं मिल रही है (मुझे लगता है कि मुझे भी इसकी आवश्यकता है?)। साथ ही, यह किसी भी तरह से कोई फर्क नहीं पड़ता है, क्योंकि वैकल्पिक सेट होने पर अपाचे अभी भी क्लाइंट प्रमाणपत्र का अनुरोध नहीं करेगा। और यदि आवश्यकता निर्धारित है, तो यह सिर्फ स्पष्टीकरण के बिना उड़ाता है। इस स्कीमा को काम करने के लिए मुझे इसे वैकल्पिक रूप से सेट करने की आवश्यकता है।

पर्यावरण

ओएस: CentOS 5.7 64-बिट (VirtualBox)

अपाचे: 2.2.3

पीएचपी: 5.3.10

मैं तुम्हें अनुमान लगा रहा हूँ हो सकता है मेरी मदद करने के लिए और जानकारी चाहिए, तो कृपया पूछें! मैं आपको जो भी चाहिए उसे प्रदान करूंगा।

संक्षेप में, मुझे यह जानने की आवश्यकता है कि अपाचे को ऊपर उल्लिखित शर्तों के अनुसार SSL क्लाइंट प्रमाणपत्र का अनुरोध करने के लिए कैसे प्राप्त करें। साथ ही, अगर सर्वर प्रमाण पत्र के साथ क्लाइंट प्रमाणपत्र "संगत" बनाने के लिए कोई विशेष हस्ताक्षर/आदि किया जाना है (फिर से, प्रत्येक ग्राहक प्रमाण के लिए खोल के माध्यम से मैन्युअल रूप से ऐसा करने के बिना!), मुझे यह जानना होगा कुंआ।

मैं अब तक 100% अटक गया हूं। Google पर कुछ भी दूरस्थ रूप से सहायक नहीं मिल रहा है। इस पर आप जो भी सहायता प्रदान कर सकते हैं, उसकी सराहना की जाएगी !! धन्यवाद! =)

+0

क्या प्रत्येक ग्राहक प्रमाण पत्र स्वयं हस्ताक्षरित किया गया है? या आपने जेनरेट किए गए अनुरोधों पर हस्ताक्षर करने के लिए अपना स्वयं का सीए बनाया है? क्लाइंट केवल आपको प्रमाण पत्र के लिए संकेत देगा यदि आपके पास एक स्थापित प्राधिकारी से हस्ताक्षरित है (जिसे सर्वर के ट्रस्ट स्टोर द्वारा निर्धारित किया गया है)। यदि प्रत्येक क्लाइंट प्रमाण स्वयं हस्ताक्षरित है, तो आपको उन सभी जेनरेट किए गए कॉर्ट को सर्वर के ट्रस्ट स्टोर में होना आवश्यक होगा, जो संभव नहीं होगा। – bobz32

+0

मैंने ओपनएसएल का उपयोग कर सर्वर पर क्लाइंट प्रमाण बनाने का प्रयास किया, पी 12 के रूप में निर्यात किया, फिर फ़ायरफ़ॉक्स में इंस्टॉल किया, लेकिन अब मुझे अपाचे से "स्थानीय जारीकर्ता प्रमाणपत्र प्राप्त करने में असमर्थ" त्रुटि मिल रही है। मैंने सर्वर प्रमाण पत्र का उपयोग कर क्लाइंट प्रमाणपत्र पर हस्ताक्षर किए हैं, तो यह क्यों काम नहीं कर रहा है? मैंने ssl.conf में SSLCACertificateFile लाइन को अपरिवर्तित करने का प्रयास किया, लेकिन फिर उसने मुझे पहली समस्या में वापस कर दिया, जिसे पृष्ठ ठीक से लोड किया गया था लेकिन क्लाइंट प्रमाणपत्र को पहचानने के बिना। तो एक बार फिर मैं वर्ग में वापस आ गया हूं .... –

उत्तर

0

यदि आप पहले से नहीं किया गया है तो आपको apache doc पर एक नज़र डालें।

सामान्य सिद्धांत यह है कि आप अपना स्वयं-हस्ताक्षरित प्रमाणपत्र बनाते हैं और इसका उपयोग करने से पहले इसे जांचते हैं।

तब ऐसा लगता है कि क्लाइंट http के माध्यम से आपकी इंट्रानेट साइट से कनेक्ट होता है। वहां से, आपके एसएसएल प्रमाण का उपयोग करके https पर स्विच करने के कई अलग-अलग तरीके हैं। अपाचे रीराइट मॉड्यूल का उपयोग करना सबसे आसान तरीका है। लेकिन आपके मामले में, जैसे आप php/mysql चेक बना रहे हैं, आप अपने क्लाइंट को http से https तक रीडायरेक्ट कर सकते हैं, जो कि आसान तरीका नहीं है।

दोनों मामलों में से किसी भी मामले में (अपाचे स्वचालित रूप से mod_rewrite के माध्यम से रीडायरेक्ट, या कैस्केडिंग टेस्ट (PHP/जावास्क्रिप्ट/एचटीएमएल) द्वारा पुनर्निर्देशन, आपको अपने 2 vhosts (http के लिए एक और https के लिए एक) को उचित तरीके से सेट करने की आवश्यकता है है, लेकिन यह कुछ परिकल्पना मान लिया गया

उदाहरण के लिए (Debian - अपाचे 2.2), यहाँ एक स्वत: रीडायरेक्ट, अपाचे के द्वारा किया जाता है (जैसे 1 मामला ऊपर वर्णित है) है:।

बिल्ली/etc/apache2/साइटों से उपलब्ध/परीक्षण

# VHOST test 

<VirtualHost *:80> 

    DocumentRoot /home/www/test 
    ServerName www.test.dev 

    # ###################### 
    # Redirect commons 
    # ###################### 
    RewriteEngine on 
    # Case of vhosts 
    RewriteOptions Inherit 

    # ###################### 
    # Redirect (empty index) 
    # ###################### 

    # Condition 1 to redirect : request matching with the server 
    RewriteCond %{HTTP_HOST} ^www\.test\.dev [NC] 

    # Condition 2 to redirect : non empty HOST 
    RewriteCond %{HTTP_HOST} !^$ 

    # Automatic Empty requests Redirect 
    RewriteRule ^(.*)/$ /index.php 


    # ###################### 
    # Redirect to SSL 
    # ###################### 
    RewriteCond %{HTTP_HOST} ^www\.test\.dev [NC] 
    RewriteCond %{HTTP_HOST} !^$ 
    RewriteCond %{SERVER_PORT} ^80$ 
    RewriteCond %{REQUEST_URI}/

    # Redirection 
    RewriteRule ^/(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 

</VirtualHost> 

दूसरा वर्चुअल होस्ट आर एसएसएल: बिल्ली/etc/apache2/साइटों से उपलब्ध/परीक्षण-ssl

# VHOST for ssl 

DocumentRoot "/home/www/test" 
ServerName www.test.dev 

    # SSL 
    SSLEngine on 
    SSLCACertificateFile /etc/apache2/ssl/cur_cert/ca.pem 
    SSLCertificateFile /etc/apache2/ssl/cur_cert/serveur.pem 
    SSLCertificateKeyFile /etc/apache2/ssl/cur_cert/serveur.key 


    <Directory "/home/www/test"> 
     Options FollowSymLinks MultiViews 
     AllowOverride None 
     Order allow,deny 
     Allow from 127.0.0.1 192.168.0.0/16 
    </Directory> 


    <Directory "/home/www/test/cgi-bin"> 
     Options FollowSymLinks MultiViews 
     AllowOverride None 
     Order allow,deny 
     Allow from 127.0.0.1 192.168.0.0/16 
     Options +ExecCGI 
     AddHandler cgi-script .cgi 
    </Directory> 

</VirtualHost> 

आपका मामला इस से थोड़ा स्थगित हो सकता है, उदाहरण के लिए आप की जरूरत नहीं होगी पहले vhost में भाग को पुनर्निर्देशित करें, लेकिन केवल एक साधारण vhost और https (एसएसएल) के लिए दूसरा।एक बार जब आप अपना mysql चेक प्राप्त कर लेते हैं तो रीडायरेक्शन PHP/जावास्क्रिप्ट द्वारा किया जाएगा।

यहाँ php, तो जावास्क्रिप्ट का उपयोग करते हुए, जिस तरह से https http से स्विच झरना के लिए एक php वर्ग से एक उदाहरण सार है, तो एचटीएमएल:

public function Redirect($url){ 

    if (TRUE !== Validator::isValidURL($url)) 
     die ("FATAL ERR: url not valid"); 

    // PHP ABSOLUTE URL REDIRECT (HTTP1.1) 
    if (!headers_sent()) { 

     header("Status: 200"); 
     header("Cache-Control: no-cache, must-revalidate"); // required for HTTP/1.1 
     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // past Date 
     header("Pragma: no-cache"); 
     header('Location: '.$url); // note: 302 code return by default with "Location" 
     flush(); 
     exit(); 

     // if headers are already sent... do javascript redirect... if javascript is disabled, do html redirect. 
    } else { 

     // Js redirect 
     echo '<script type="text/javascript">'; 
     //echo "<!--"; 
     echo 'document.location="'. $url .'";'; 
     //echo "//-->"; 
     echo '</script>'; 

     // HTML redirect if js disabled 
     echo '<noscript>'; 
     echo '<meta http-equiv="refresh" content="0;url="'.$url.'" />'; 
     echo '</noscript>'; 

     exit(); 
    } 

    return FALSE; 

} /* end of method (redirect) */ 

आशा है कि यह मदद करता है आप बेहतर ढंग से समझने के लिए कैसे करने के लिए आगे बढ़ें और इस दृष्टिकोण को अपने विशिष्ट मामले में अनुकूलित करें।

+0

लेकिन मेरी समस्या यह है कि रीडायरेक्ट के संबंध में नहीं है। मैं सीधे https के माध्यम से पेज तक पहुंच रहा हूं। अर्थात। ब्राउज़र में, मैं https: // का उपयोग कर रहा हूं। तो पोर्ट 80 मुद्दा पर नहीं है। –

+0

मैंने ओपनएसएल का उपयोग कर सर्वर पर क्लाइंट प्रमाण बनाने का प्रयास किया, पी 12 के रूप में निर्यात किया, फिर फ़ायरफ़ॉक्स में इंस्टॉल किया, लेकिन अब मुझे अपाचे से "स्थानीय जारीकर्ता प्रमाणपत्र प्राप्त करने में असमर्थ" त्रुटि मिल रही है। मैंने सर्वर प्रमाण पत्र का उपयोग कर क्लाइंट प्रमाणपत्र पर हस्ताक्षर किए हैं, तो यह क्यों काम नहीं कर रहा है? मैंने ssl.conf में SSLCACertificateFile लाइन को अपरिवर्तित करने का प्रयास किया, लेकिन फिर उसने मुझे पहली समस्या में वापस कर दिया, जिसे पृष्ठ ठीक से लोड किया गया था लेकिन क्लाइंट प्रमाणपत्र को पहचानने के बिना। –

+0

क्षमा करें, अब मैं आपके बिंदु को बेहतर ढंग से समझता हूं और http से कनेक्ट करने और लॉगिन करने के बाद mysql चेक किए जाने के बाद https को स्विच करने से कोई अन्य सरल समाधान नहीं है, जो मेरे लिए एक सुरक्षित दृष्टिकोण के रूप में दिखता है लेकिन अनुभव के द्वारा काफी बड़ा उपभोक्ता है। – hornetbzz

4

सबसे पहले, आपको क्लाइंट प्रमाणपत्र का अनुरोध करने के लिए अपाचे एचटीपीडी को कॉन्फ़िगर करने की आवश्यकता है। इसके लिए, आपको उस विधि/निर्देशिका पर कम से कम SSLVerifyClient optional का उपयोग करने की आवश्यकता है, जिसे आप इस विधि से प्रमाणित करना चाहते हैं।

दूसरा, क्लाइंट द्वारा भेजे गए प्रमाणपत्रों को अपाचे एचटीपीडी द्वारा भी भरोसा किया जाना चाहिए। (आप सैद्धांतिक रूप से SSLVerifyClient optional_no_ca का उपयोग कर सकते हैं, अपाचे एचटीपीडी एसएसएल/टीएलएस स्टैक पर किसी क्लाइंट प्रमाण पत्र को छोड़ दें, और उसके बाद केवल PHP के भीतर प्रमाण पत्र सत्यापित करें, लेकिन यह काफी काम है, जिसके लिए आपको थोड़ी अधिक सावधानी बरतनी चाहिए जरूरी नहीं कि आसान कोड; अधिक महत्वपूर्ण बात यह है कि यह इस संदर्भ में काफी बेकार होगा, क्योंकि आप ऐसे परिदृश्य में हैं जहां आप अपने सीए के नियंत्रण में हैं।

जहां तक ​​मैं समझता हूं, SSL_CLIENT_VERIFY (एक चर मैंने बहुत ज्यादा उपयोग नहीं किया है) SSLVerifyClient optional_no_ca के साथ केवल वास्तव में उपयोगी लगता है। यह SSLVerifyClient optional के साथ काम कर सकता है, लेकिन मुझे शक है। SSLVerifyClient require किसी ऐसे क्लाइंट प्रमाणपत्र का उपयोग करके कनेक्शन को अस्वीकार कर देगा जो विश्वसनीय नहीं है (SSLCACertificateFile/SSLCACertificatePath में सीए में से एक द्वारा), या यदि कोई प्रमाण पत्र नहीं है। जहां तक ​​मुझे पता है, SSLVerifyClient optional क्लाइंट को प्रमाण पत्र के बिना या विश्वसनीय प्रमाणपत्र के माध्यम से जाने देगा, लेकिन यदि प्रमाणपत्र विश्वसनीय नहीं है तो कनेक्शन को भी अस्वीकार कर देगा।

यहां, कनेक्शन को अस्वीकार कर, मेरा मतलब है कि एक चेतावनी के साथ अचानक एसएसएल/टीएलएस कनेक्शन बंद करना। HTTP (एस) त्रुटि पृष्ठ उत्पन्न करने का कोई मौका नहीं है। आपको मानक ब्राउज़र त्रुटि में मिलेगा, ssl_error_unknown_certificate_... की लाइनों के साथ कुछ। (आपको प्रयोज्यता के मामले में इस पर विचार करना चाहिए।)

तब से, आपको अपनी सीए सेट करने की ज़रूरत है, संभवतः वेब-इन-ब्राउजर कुंजी-पीढ़ी के साथ-साथ एक ही वेबसाइट के भीतर वेब-आधारित है। आप इसके लिए SSLVerifyClient require नहीं चाहते हैं, क्योंकि आपको उन उपयोगकर्ताओं को जाने की आवश्यकता होगी जिनके पास अभी तक प्रमाणपत्र नहीं है (इसके बजाय optional का उपयोग करें)। यह कहा जा रहा है कि, इन निर्देशों को पूरे होस्ट पर लागू नहीं होना चाहिए, लेकिन कुछ स्थानों/निर्देशिकाओं के लिए विशिष्ट हो सकता है।

अपने स्वयं के वेब-आधारित सीए (या अधिक आम तौर पर, अपना स्वयं का सीए बनाना) को एकीकृत करना जरूरी नहीं है यदि आप इन सबके लिए नए हैं। तैयार किए गए टूल मौजूद हैं (उदा। OpenCA), या आप JavaScript/ActiveX के विभिन्न बिट्स का उपयोग करके स्वयं का निर्माण कर सकते हैं, और आपको SPKAC या PKCS # 10 अनुरोधों को संभालने के लिए सर्वर-साइड कोड की आवश्यकता होगी (और वास्तविक प्रमाणपत्र जारी करने के लिए)। (ऐसे सीए के लिए उपयोगी होने के लिए, आप उन उपयोगकर्ताओं को चाहते हैं जो आवेदन के समय आईडी के कुछ सबूत प्रदान करने के लिए नए प्रमाण पत्र के लिए आवेदन करते हैं, शायद एक पासवर्ड।)

जब यह स्थापित होता है, तो आपको SSLCACertificateFile (या ...Path) को अपने आंतरिक सीए के सीए प्रमाणपत्र को इंगित करने के लिए कॉन्फ़िगर करें (चाहे वह एक वेब-आधारित सीए है या नहीं, उसी साइट पर या नहीं)। (बेशक, अपने सीए निजी की निजी कुंजी को रखें, शायद आपके सीए वेब-आधारित एप्लिकेशन में कॉन्फ़िगर किया गया है, लेकिन अपाचे एचटीपीडी को इसके बारे में जानने की आवश्यकता नहीं है।) ब्राउज़र केवल उन सीए या इंटरमीडिएट्स द्वारा जारी प्रमाणपत्रों का सुझाव देंगे (जब तक कि आपने SSLCADNRequestFile भी कॉन्फ़िगर किया है, जिसका उपयोग स्वीकृत सीए की सूची भेजने के लिए किया जाएगा)।

ध्यान दें कि इन दो चरणों (आपके सीए की स्थापना और क्लाइंट-प्रमाणपत्रों का उपयोग करने के लिए अपनी वेबसाइट स्थापित करना) वास्तव में वास्तव में स्वतंत्र हैं।तथ्य यह है कि दोनों एक ही साइट का हिस्सा हो सकते हैं सुविधाजनक हो सकता है, लेकिन यह आवश्यक नहीं है। आप साइट पर पहले सीए को तैनात किए बिना अपाचे एचटीपीडी सेट अप करने का प्रयास कर सकते हैं (मैं इसकी सिफारिश करता हूं, भले ही यह देखने के लिए कि आप क्या प्राप्त कर रहे हैं)। उदाहरण के लिए अपने कुछ छोटे सीए बनाने के लिए कई टूल हैं जो कुछ हद तक प्रमाणपत्रों के साथ प्रबंधनीय हैं: OpenSSL's CA.pl या TinyCA। आप इन test certificates (localhost और testclient, testclient_r को भी रद्द कर सकते हैं यदि आप सीआरएल का उपयोग करना चाहते हैं, शायद पहले आवश्यक नहीं है): सभी पासवर्ड testtest हैं।

जैसा कि आप पहले ही अनुमान लगा चुके हैं (आपके MySQL डीबी के साथ), आपको अपने द्वारा जारी किए गए प्रमाणपत्रों को प्रबंधित करने और उन्हें उपयोगकर्ताओं को मैप करने की आवश्यकता होगी। SSL_CLIENT_M_SERIAL और SSL_CLIENT_I_DN उपयोग करने के लिए सही चर नहीं हैं, हालांकि। SSL_CLIENT_I_DN जारीकर्ता डीएन (यानी सीए के विषय डीएन) है। आप जो खोज रहे हैं वह SSL_CLIENT_S_DN है: क्लाइंट प्रमाण विषय डीएन। SSL_CLIENT_M_SERIAL सर्टिफिकेट सीरियल नंबर है: इसका उपयोग न करें, क्योंकि यह प्रति प्रमाणपत्र अद्वितीय है: एक उपयोगकर्ता के पास एक ही विषय डीएन के साथ कई प्रमाणपत्र हो सकते हैं (उदाहरण के लिए यदि कोई समाप्त हो जाता है या रद्द कर दिया जाता है)।


इस सब के बावजूद, मुझे यकीन है कि क्लाइंट-प्रमाण पत्र सबसे अच्छा तरीका है (पासवर्ड के बिना पर लॉग ऑन करें आपकी कंपनी में कर्मचारियों दे) अपने लक्ष्य को प्राप्त करने हैं कि क्या नहीं कर रहा हूँ।

  • सबसे पहले, उपयोगकर्ता को अपने पासवर्ड को पासवर्ड के साथ सुरक्षित रखना चाहिए। आप वास्तव में क्या कर रहे हैं सिंगल-साइन ऑन (एसएसओ) का कुछ रूप है, मुझे लगता है।

  • दूसरा, आपके उपयोगकर्ताओं की कंप्यूटर-साक्षरता की डिग्री के आधार पर, प्रमाण पत्र वास्तव में प्रबंधित करना मुश्किल हो सकता है।

    तथ्य यह है कि शब्द "प्रमाणपत्र", कडाई के निजी कुंजी बिल्कुल शामिल नहीं है, लेकिन कभी कभी निजी कुंजी के उपयोग का तात्पर्य कुछ के लिए भ्रामक हो सकते हैं। एक तरफ, आप कभी-कभी "अपने सर्टिफिकेट को अपने ब्राउज़र में आयात करें" और "लॉग इन करने के लिए अपने प्रमाणपत्र का उपयोग करें" सुनते हैं; दूसरी ओर, आप "मुझे अपना प्रमाणपत्र भेजें" भी सुन सकते हैं। पूर्व का अर्थ है कि निजी अभिव्यक्तियों का उपयोग और उपलब्धता ("प्रमाणपत्र" का अर्थ केवल इन अभिव्यक्तियों में .p12 हो सकता है)। उत्तरार्द्ध में निश्चित रूप से निजी कुंजी शामिल नहीं होना चाहिए।

    ब्राउज़र यूजर इंटरफेस काफी खराब या प्रमाणपत्र प्रबंधित करने या लॉग आउट होने के लिए भ्रमित हो जाते हैं। फिर, अगर प्रमाण पत्र मान्यता प्राप्त नहीं है, SSL/TLS कनेक्शन, स्थापित नहीं किया जाएगा, ताकि वेब सर्वर किसी भी तरह की एक HTML त्रुटि पृष्ठ प्रदर्शित करने का मौका नहीं मिलता है।

शायद आप भी (जैसे कैस, कुछ SAML- आधारित या करबरोस/SPNEGO।) एसएसओ के अन्य रूपों पर विचार कर सकते

0

मैं के साथ एक समान समस्या है:

  • CentOS 6.3
  • अपाचे 2.2.15

कुछ प्रयास करने के बाद मैं अपनी समस्या को पहचानता हूं।

अगर मैं SSLVerifyClient optional या SSLVerifyClient optional_no_ca सेट और मैं भी SSLCACertificateFile या SSLCACertificatePath निर्दिष्ट करते हैं, अपाचे क्लाइंट प्रमाणपत्र सीए से सीए संदर्भ फ़ाइल/पथ विन्यास में निर्दिष्ट में पाया ही अगर यह जारी है प्राप्त कर लेता है।

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