अपने मूल CA पर समान निजी कुंजी रखने से सभी प्रमाणपत्रों को नई जड़ के खिलाफ सफलतापूर्वक सत्यापन जारी रखने की अनुमति मिलती है; आप सभी की आवश्यकता है कि नई जड़ पर भरोसा करें।
रिश्ते पर हस्ताक्षर करने का प्रमाण पत्र निजी कुंजी से हस्ताक्षर पर आधारित है; एक नई वैधता अवधि और आवश्यकतानुसार किसी भी अन्य नई विशेषताओं के साथ एक नया सार्वजनिक प्रमाणपत्र बनाते समय एक ही निजी कुंजी (और, संक्षेप में, एक ही सार्वजनिक कुंजी) को बनाए रखना, विश्वास संबंध को बनाए रखता है। CRL, भी, पुराने प्रमाणपत्र से लेकर नए तक जारी रख सकते हैं, जैसे कि वे निजी कुंजी द्वारा हस्ताक्षरित प्रमाण पत्र की तरह हैं।
तो, चलो सत्यापित करें!
एक जड़ बनाओ CA:
openssl req -new -x509 -keyout root.key -out origroot.pem -days 3650 -nodes
इसमें से एक बच्चे का प्रमाण पत्र बनाएं:
openssl genrsa -out cert.key 1024
openssl req -new -key cert.key -out cert.csr
बच्चे के प्रमाणपत्र पर हस्ताक्षर करें:
openssl x509 -req -in cert.csr -CA origroot.pem -CAkey root.key -create_serial -out cert.pem
rm cert.csr
सभी वहाँ सेट, सामान्य प्रमाणपत्र संबंध। चलिए ट्रस्ट का सत्यापन करते हैं:
# openssl verify -CAfile origroot.pem -verbose cert.pem
cert.pem: OK
ठीक है, तो, अब कहते हैं कि 10 साल बीत गए। आइए उसी मूल निजी कुंजी से एक नया सार्वजनिक प्रमाणपत्र बनाएं।
openssl req -new -key root.key -out newcsr.csr
openssl x509 -req -days 3650 -in newcsr.csr -signkey root.key -out newroot.pem
rm newcsr.csr
और .. यह काम किया?
# openssl verify -CAfile newroot.pem -verbose cert.pem
cert.pem: OK
पर क्यों? वे अलग-अलग फाइलें हैं, है ना?
# sha1sum newroot.pem
62577e00309e5eacf210d0538cd79c3cdc834020 newroot.pem
# sha1sum origroot.pem
c1d65a6cdfa6fc0e0a800be5edd3ab3b603e1899 origroot.pem
हां, लेकिन, इसका मतलब यह नहीं है कि नई सार्वजनिक कुंजी क्रिप्टोग्राफिक रूप से प्रमाणपत्र पर हस्ताक्षर से मेल नहीं खाती है। विभिन्न सीरियल नंबर, एक ही मापांक:
# openssl x509 -noout -text -in origroot.pem
Serial Number:
c0:67:16:c0:8a:6b:59:1d
...
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:bd:56:b5:26:06:c1:f6:4c:f4:7c:14:2c:0d:dd:
3c:eb:8f:0a:c0:9d:d8:b4:8c:b5:d9:c7:87:4e:25:
8f:7c:92:4d:8f:b3:cc:e9:56:8d:db:f7:fd:d3:57:
1f:17:13:25:e7:3f:79:68:9f:b5:20:c9:ef:2f:3d:
4b:8d:23:fe:52:98:15:53:3a:91:e1:14:05:a7:7a:
9b:20:a9:b2:98:6e:67:36:04:dd:a6:cb:6c:3e:23:
6b:73:5b:f1:dd:9e:70:2b:f7:6e:bd:dc:d1:39:98:
1f:84:2a:ca:6c:ad:99:8a:fa:05:41:68:f8:e4:10:
d7:a3:66:0a:45:bd:0e:cd:9d
# openssl x509 -noout -text -in newroot.pem
Serial Number:
9a:a4:7b:e9:2b:0e:2c:32
...
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:bd:56:b5:26:06:c1:f6:4c:f4:7c:14:2c:0d:dd:
3c:eb:8f:0a:c0:9d:d8:b4:8c:b5:d9:c7:87:4e:25:
8f:7c:92:4d:8f:b3:cc:e9:56:8d:db:f7:fd:d3:57:
1f:17:13:25:e7:3f:79:68:9f:b5:20:c9:ef:2f:3d:
4b:8d:23:fe:52:98:15:53:3a:91:e1:14:05:a7:7a:
9b:20:a9:b2:98:6e:67:36:04:dd:a6:cb:6c:3e:23:
6b:73:5b:f1:dd:9e:70:2b:f7:6e:bd:dc:d1:39:98:
1f:84:2a:ca:6c:ad:99:8a:fa:05:41:68:f8:e4:10:
d7:a3:66:0a:45:bd:0e:cd:9d
आइए यह सत्यापित करने के लिए थोड़ा आगे जाएँ कि यह वास्तविक विश्व प्रमाणपत्र सत्यापन में काम कर रहा है।
एक अपाचे उदाहरण को आग दें, और हम इसे एक जाने दें (डेबियन फ़ाइल संरचना, आवश्यकतानुसार समायोजित करें):
# cp cert.pem /etc/ssl/certs/
# cp origroot.pem /etc/ssl/certs/
# cp newroot.pem /etc/ssl/certs/
# cp cert.key /etc/ssl/private/
हम इन निर्देशों को VirtualHost
443 पर एक सुनवाई पर सेट करेंगे - याद रखें, newroot.pem
रूट प्रमाणपत्र तब भी मौजूद नहीं cert.pem
था जब उत्पन्न और हस्ताक्षरित था।
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cert.pem
SSLCertificateKeyFile /etc/ssl/private/cert.key
SSLCertificateChainFile /etc/ssl/certs/newroot.pem
आइए देखें कि ओपनसेल इसे कैसे देखता है:
# openssl s_client -showcerts -CAfile newroot.pem -connect localhost:443
Certificate chain
0 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=server.lan
i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=root
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
1 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=root
i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=root
-----BEGIN CERTIFICATE-----
MIICHzCCAYgCCQCapHvpKw4sMjANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJB
...
-----END CERTIFICATE-----
(this should match the actual contents of newroot.pem)
...
Verify return code: 0 (ok)
ठीक है, और MS के क्रिप्टो एपीआई का उपयोग करने वाले ब्राउज़र के बारे में कैसे? होगा जड़ पर भरोसा, पहले, तो यह सब अच्छा है, नए रूट के सीरियल नंबर के साथ:
और, हमें अभी भी पुरानी जड़ के साथ काम करना चाहिए। अपाचे के विन्यास को चारों ओर घुमाएँ:
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cert.pem
SSLCertificateKeyFile /etc/ssl/private/cert.key
SSLCertificateChainFile /etc/ssl/certs/origroot.pem
अपाचे पर एक पूरा पुनरारंभ करें, एक पुनः लोड नहीं होगा ठीक से certs स्विच।
# openssl s_client -showcerts -CAfile origroot.pem -connect localhost:443
Certificate chain
0 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=server.lan
i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=root
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
1 s:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=root
i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=root
-----BEGIN CERTIFICATE-----
MIIC3jCCAkegAwIBAgIJAMBnFsCKa1kdMA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV
...
-----END CERTIFICATE-----
(this should match the actual contents of origroot.pem)
...
Verify return code: 0 (ok)
और, एमएस क्रिप्टो एपीआई ब्राउज़र के साथ, अपाचे की पुरानी जड़ को पेश कर रहा है, लेकिन कंप्यूटर के भरोसेमंद स्टोर में नई जड़ अभी भी है। यह स्वचालित रूप से इसे खोज लेगा और विश्वसनीय (नई) रूट के खिलाफ प्रमाण पत्र को मान्य कर देगा, इसके बावजूद अपाचे एक अलग श्रृंखला (पुरानी जड़) प्रस्तुत करेगा। नई जड़ों को विश्वसनीय जड़ों से हटाने और मूल रूट प्रमाणपत्र को जोड़ने के बाद, सब ठीक है:
तो यह बात है! जब आप नवीनीकरण करते हैं तो उसी निजी कुंजी को रखें, नए विश्वसनीय रूट में स्वैप करें, और यह बहुत ही सभी काम करता है । सौभाग्य!