आपके पास अतीत में प्रमाण पत्र बनाने के दो तरीके हैं। प्रमाण पत्र (3) पर हस्ताक्षर करते समय या तो समय (1) (2), या समय अंतराल को परिभाषित करना।
1) सबसे पहले, समय को जगाने के बारे में: एक कार्यक्रम बनाने के लिए सोचें कि यह सिस्टम से अलग तारीख में है, एक नज़र डालें libfaketime
औरfaketime
इसे डेबियन में स्थापित करने के लिए:
sudo apt-get install faketime
फिर आप कमांड faketime
से पहले उपयोग करेंगे openssl
।
उपयोग के उदाहरणों के लिए:
$faketime 'last friday 5 pm' /bin/date
Fri Apr 14 17:00:00 WEST 2017
$faketime '2008-12-24 08:15:42' /bin/date
Wed Dec 24 08:15:42 WET 2008
से man faketime
:
दिए गए आदेश को यह मानते हुए धोखा दिया जाएगा कि वर्तमान प्रणाली का समय टाइमस्टैम्प में निर्दिष्ट है। दीवार की घड़ी इस तिथि और समय से चलती रहेगी जब तक कि अन्यथा निर्दिष्ट न हो (उन्नत विकल्प देखें)। असल में, फेकटाइम, लाइबफैकटाइम के लिए एक सरल आवरण है, जो कि एक छोटे पुस्तकालय को लोड करने के लिए LD_PRELOAD तंत्र का उपयोग करता है, जो समय (2) और fstat (2) जैसे सिस्टम कॉल को स्वीकार करता है।
उदाहरण के लिए, अपने मामले में, आप बहुत अच्छी तरह से 2008 की तारीख को परिभाषित कर सकते हैं, और फिर 2010 तक 2 साल की वैधता के साथ एक प्रमाण पत्र बना सकते हैं।
faketime '2008-12-24 08:15:42' openssl ...
एक साइड नोट के रूप में, इस उपयोगिता का उपयोग कई यूनिक्स संस्करणों में किया जा सकता है, जिसमें मैकओएस भी शामिल है, किसी भी तरह के कार्यक्रमों के लिए एक आवरण के रूप में (कमांड लाइन के लिए अनन्य नहीं)।
स्पष्टीकरण के रूप में, केवल इस विधि (और उनके बच्चों) से भरी हुई बायनेरिज़ का समय बदल गया है, और नकली समय बाकी प्रणाली के वर्तमान समय को प्रभावित नहीं करता है।
2) जैसा कि @Wyzard बताता है, आपके पास वह datefudge
पैकेज भी है जो उपयोग में बहुत समान है faketime
।
अंतर के रूप में, datefudge
प्रभावित नहीं करता है fstat
(यानी फ़ाइल समय निर्माण नहीं बदलता है)। इसका स्वयं का पुस्तकालय, datefudge.so भी है, जो LD_PRELOAD का उपयोग करके लोड करता है।
इसका एक -s
static time
समय भी है जहां संदर्भित समय हमेशा वापस आ जाता है, इसके बावजूद कि कितने अतिरिक्त सेकंड बीत चुके हैं।
$ datefudge --static "2007-04-01 10:23" sh -c "sleep 3; date -R"
Sun, 01 Apr 2007 10:23:00 +0100
3) समय को कम करने के अलावा, और यहां तक कि बस, आप ओपनएसएसएल में प्रमाण पत्र पर हस्ताक्षर करते समय प्रमाणपत्र की वैधता के प्रारंभिक बिंदु और समाप्ति बिंदु को भी परिभाषित कर सकते हैं ।
आपके प्रश्न से जो प्रश्न आपके लिंक से जुड़ा हुआ है, उसकी गलत धारणा यह है कि प्रमाणपत्र की वैधता अनुरोध समय (सीएसआर अनुरोध पर) में परिभाषित नहीं है, लेकिन जब यह हस्ताक्षर करते हैं।
openssl ca
स्व-हस्ताक्षरित प्रमाण पत्र बनाने के लिए उपयोग करते समय , विकल्प जोड़ें -startdate
और -enddate
।
उन दो विकल्पों में दिनांक स्वरूप, जो openssl/crypto/x509/x509_vfy.c
कि ओपनसीएल स्रोतों के अनुसार है , ASN1_TIME उर्फ ASN1UTCTime: प्रारूप या तो YYMMDDHHMMSSZ या YYYYMMDDHMMSSZ होना चाहिए।
उद्धरण openssl/crypto/x509/x509_vfy.c
:
int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time)
{
static const size_t utctime_length = sizeof("YYMMDDHHMMSSZ") - 1;
static const size_t generalizedtime_length = sizeof("YYYYMMDDHHMMSSZ") - 1;
ASN1_TIME *asn1_cmp_time = NULL;
int i, day, sec, ret = 0;
/*
* Note that ASN.1 allows much more slack in the time format than RFC5280.
* In RFC5280, the representation is fixed:
* UTCTime: YYMMDDHHMMSSZ
* GeneralizedTime: YYYYMMDDHHMMSSZ
*
* We do NOT currently enforce the following RFC 5280 requirement:
* "CAs conforming to this profile MUST always encode certificate
* validity dates through the year 2049 as UTCTime; certificate validity
* dates in 2050 or later MUST be encoded as GeneralizedTime."
*/
और CHANGE लॉग (2038 बग?) से - यह परिवर्तन लॉग केवल एक अतिरिक्त फ़ुटनोट के रूप में है, क्योंकि यह केवल API का उपयोग करने वालों को चिंतित करता है।
1.1.0e और 1.1.1 के बीच परिवर्तन [xx XXX xxxx]
*) ASN.1 प्रकार INT32, UINT32, INT64, UINT64 और Z के साथ उपसर्ग जोड़ें। ये LONG और ZLONG को बदलने और आकार के सुरक्षित होने के लिए हैं। लोंग और ज़्लॉन्ग का उपयोग हतोत्साहित किया जाता है और ओपनएसएसएल 1.2.0 में वंचित करने के लिए निर्धारित है।
इसलिए, 1 जनवरी 2008 से 1 जनवरी 2010 तक 1 प्रमाण पत्र बनाना, निम्नानुसार किया जा सकता है:
openssl ca -config /path/to/myca.conf -in req.csr -out ourdomain.pem \
-startdate 200801010000Z -enddate 201001010000Z
या
openssl ca -config /path/to/myca.conf -in req.csr -out ourdomain.pem \
-startdate 0801010000Z -enddate 1001010000Z
-startdate
और स्रोतों और परिवर्तन लॉग -enddate
में दिखाई देते हैं openssl
; जैसा कि @guntbert ने उल्लेख किया है, जबकि वे मुख्य man openssl
पृष्ठ में नहीं दिखाई देते हैं , वे भी इसमें दिखाई देते हैं man ca
:
-startdate date
this allows the start date to be explicitly set. The format of the date is
YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure).
-enddate date
this allows the expiry date to be explicitly set. The format of the date is
YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure).
उद्धरण openssl/CHANGE
:
0.9.3a और 0.9.4 के बीच परिवर्तन [09 अगस्त 1999]
*) फिक्स -स्टार्टडेट और -डेटडेट (जो गायब था) 'सीए' प्रोग्राम के लिए तर्क।
पुनश्च के रूप में के चुने हुए जवाब के लिए सवाल आप StackExchange से संदर्भ: यह आम तौर पर एक है बुरा विचार विशेष रूप से उत्पादन प्रणालियों में, सिस्टम का समय बदलने के लिए; और इस उत्तर में विधियों के साथ आपको उपयोग करते समय रूट विशेषाधिकारों की आवश्यकता नहीं है।