Geçmişte sertifika oluşturmanın iki yolu vardır. Ya (1) (2) numaralı numaraya, ya da sertifikayı (3) imzalarken zaman aralığının tanımlanması.
1) İlk olarak, zaman yalan hakkında: bir program sistemden farklı bir tarihte olduğunu düşünüyorum yapmak bir göz için libfaketime
vefaketime
Debian'da kurmak için:
sudo apt-get install faketime
Daha sonra komuttan faketime
önce kullanırsınız openssl
.
Kullanım örnekleri için:
$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
Kimden man faketime
:
Verilen komut, mevcut sistem zamanının zaman damgasında belirtilen zaman olduğuna inanmak için kandırılacak. Duvar saati, aksi belirtilmedikçe bu tarih ve saatten çalışmaya devam eder (bkz. Gelişmiş seçenekler). Aslında, faketime, libfaketime için, zaman zaman (2) ve fstat (2) gibi işlev çağrılarına sistem çağrılarına müdahale eden küçük bir kütüphaneyi yüklemek için LD_PRELOAD mekanizmasını kullanan basit bir sarıcıdır.
Örneğin, sizin durumunuzda, 2008 tarihini çok iyi tanımlayabilir ve daha sonra 2010 yılına kadar 2 yıl geçerliliği olan bir sertifika oluşturabilirsiniz.
faketime '2008-12-24 08:15:42' openssl ...
Bir yandan not olarak, bu yardımcı program MacOS dahil olmak üzere birçok Unix sürümünde, her türlü programa (komut satırına özel değil) sarıcı olarak kullanılabilir.
Bir açıklama olarak, yalnızca bu yöntemle (ve onların çocuklarıyla) yüklenen ikili dosyalar zamanlarını değiştirmiştir ve sahte zaman sistemin geri kalanının o andaki zamanını etkilememektedir.
2) @Wyzard'ın belirttiği gibi, datefudge
kullanımda çok benzer bir pakete sahipsin faketime
.
Farklılıklar olarak, datefudge
etkilemez fstat
(yani, dosya zamanı oluşturulmasını değiştirmez). Ayrıca LD_PRELOAD kullanarak yüklenen kendi datefudge.so kütüphanesine sahiptir.
Ayrıca -s
static time
kaç saniye geçmesine rağmen başvurulan zamanın her zaman geri döndürüldüğü bir yere sahiptir .
$ datefudge --static "2007-04-01 10:23" sh -c "sleep 3; date -R"
Sun, 01 Apr 2007 10:23:00 +0100
3) OpenSSL'de sertifikayı imzalarken zamana ve hatta daha basit bir şekilde, sertifikanın başlangıç ve bitiş geçerlilik noktalarını tanımlayabilirsiniz .
Sorunuzda bağladığınız sorunun yanlış anlaşılması, sertifika geçerliliğinin istek anında (CSR isteğinde) değil, imzalanırken tanımlandığı şeklindedir.
Kullanırken openssl ca
otomatik olarak imzalanan sertifika oluşturmak için, seçenekler eklemek -startdate
ve -enddate
.
openssl/crypto/x509/x509_vfy.c
Openssl kaynaklarına göre, bu iki seçenekdeki tarih formatı ASN1_TIME aka ASN1UTCTime: format ya YYMMDDHHMMSSZ ya da YYYYMMDDHHMMSSZ olmalıdır.
Alıntı yapmak 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."
*/
Ve CHANGE günlüğünden (2038 hata?) - Bu değişiklik günlüğü, yalnızca doğrudan API kullananları ilgilendirdiği için ek bir dipnot gibidir.
1.1.0e ve 1.1.1 arasındaki değişiklikler [xx XXX xxxx]
*) ASN.1 INT32, UINT32, INT64, UINT64 tiplerini ve Z ile önceden belirlenmiş varyantlarını ekleyin. LONG ve ZLONG'un kullanımı önerilmez ve OpenSSL 1.2.0'da kullanımdan kaldırılması planlanmaktadır.
Böylece 1 Ocak 2008'den 1 Ocak 2010'a kadar bir sertifika oluşturmak şöyle yapılabilir:
openssl ca -config /path/to/myca.conf -in req.csr -out ourdomain.pem \
-startdate 200801010000Z -enddate 201001010000Z
veya
openssl ca -config /path/to/myca.conf -in req.csr -out ourdomain.pem \
-startdate 0801010000Z -enddate 1001010000Z
-startdate
ve kaynaklarda ve CHANGE günlüğünde -enddate
belirir openssl
; @guntbert'in belirttiği gibi, ana man openssl
sayfada görünmemekle birlikte, bunlar da şöyle görünür 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).
Alıntı yapmak openssl/CHANGE
:
0.9.3a ile 0.9.4 arasındaki değişiklikler [09 Ağu 1999]
*) 'Ca' programına -startdate ve -enddate (eksik olan) argümanlarını düzeltin.
PS StackExchange'ten referans aldığınız sorunun seçilen cevabı gelince : genellikle üretim sistemlerinde sistem saatini değiştirmek genellikle kötü bir fikirdir ; ve bu cevaptaki yöntemlerle, bunları kullanırken kök izinlerine ihtiyacınız yoktur.