Dodam obsługę HTTPS do wbudowanego urządzenia z systemem Linux. Próbowałem wygenerować samopodpisany certyfikat, wykonując następujące czynności:
openssl req -new > cert.csr
openssl rsa -in privkey.pem -out key.pem
openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 1001
cat key.pem>>cert.pem
To działa, ale pojawiają się pewne błędy, na przykład w Google Chrome:
Prawdopodobnie nie jest to strona, której szukasz!
Certyfikat bezpieczeństwa tej witryny nie jest zaufany!
Czy coś brakuje? Czy to właściwy sposób na zbudowanie certyfikatu z podpisem własnym?
ssl
openssl
certificate
ssl-certificate
x509certificate
michelemarcon
źródło
źródło
alternate_names
sekcją i przekazać go z-config
opcją. Ponadto umieszczenie nazwy DNS we wspólnej nazwie (CN) jest przestarzałe (ale nie zabronione) zarówno przez IETF, jak i fora CA / Browser. Każda nazwa DNS w CN musi być również obecna w sieci SAN. Nie ma możliwości uniknięcia korzystania z SAN. Zobacz odpowiedź poniżej.Odpowiedzi:
Możesz to zrobić za pomocą jednego polecenia:
Możesz także dodać
-nodes
(skrót odno DES
), jeśli nie chcesz chronić swojego klucza prywatnego hasłem. W przeciwnym razie pojawi się monit o podanie hasła „co najmniej 4-znakowego”.days
Parametr (365) można zastąpić dowolną liczbą wpłynąć na datę ważności. Następnie wyświetli monit o podanie nazwy kraju, ale możesz po prostu nacisnąć Enteri zaakceptować wartości domyślne.Dodaj,
-subj '/CN=localhost'
aby ukryć pytania dotyczące zawartości certyfikatu (zamieńlocalhost
na żądaną domenę).Certyfikaty z podpisem własnym nie są sprawdzane przez jakąkolwiek stronę trzecią, chyba że wcześniej zaimportujesz je do przeglądarek. Jeśli potrzebujesz większego bezpieczeństwa, powinieneś użyć certyfikatu podpisanego przez urząd certyfikacji (CA).
źródło
-subj "/C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=www.example.com"
-sha256
do wygenerowania certyfikatu opartego na SHA-256.Łatwo jest utworzyć samopodpisany certyfikat. Wystarczy użyć
openssl req
polecenia. Stworzenie takiego, które może być wykorzystywane przez największy wybór klientów, takich jak przeglądarki i narzędzia wiersza poleceń, może być trudne.Jest to trudne, ponieważ przeglądarki mają własny zestaw wymagań i są bardziej restrykcyjne niż IETF . Wymagania stosowane przez przeglądarki są dokumentowane na forach CA / Browser (patrz odnośniki poniżej). Ograniczenia występują w dwóch kluczowych obszarach: (1) kotwice zaufania i (2) nazwy DNS.
Nowoczesne przeglądarki (takie jak Warez, którego używamy w 2014/2015 r.) Chcą certyfikatu, który łączy się z kotwicą zaufania, i chcą, aby nazwy DNS były prezentowane w określony sposób w certyfikacie. Przeglądarki aktywnie działają na podstawie certyfikatów serwerów z podpisem własnym.
Niektóre przeglądarki nie ułatwiają importu certyfikatu serwera z podpisem własnym. W rzeczywistości nie można tego zrobić za pomocą niektórych przeglądarek, takich jak przeglądarka Androida. Zatem kompletnym rozwiązaniem jest stać się własnym autorytetem.
W przypadku braku stania się własnym autorytetem, musisz poprawnie ustawić nazwy DNS, aby dać certyfikatowi największą szansę na sukces. Ale zachęcam cię, abyś stał się swoim własnym autorytetem. Łatwo jest stać się własnym autorytetem i ominie on wszystkie problemy związane z zaufaniem (komu lepiej zaufać niż tobie?).
Wynika to z faktu, że przeglądarki używają wstępnie zdefiniowanej listy kotwic zaufania do sprawdzania poprawności certyfikatów serwerów. Samopodpisany certyfikat nie łączy się z zaufaną kotwicą.
Najlepszym sposobem na uniknięcie tego jest:
Krok 1 - Utworzenie własnego urzędu oznacza po prostu utworzenie certyfikatu z podpisem własnym
CA: true
i właściwego użycia klucza. Oznacza to, że przedmiotowe a Emitent jest ten sam podmiot, CA ma wartość true w podstawowe ograniczenia (to powinno być również oznaczona jako krytyczna), klucz wykorzystywany jestkeyCertSign
icrlSign
(jeśli używasz CRL) i Subject Key Identifier (SKI) jest taki sam jak identyfikator klucza urzędu (AKI).Aby stać się własnym urzędem certyfikacji, zobacz * W jaki sposób podpisujesz wniosek o podpisanie certyfikatu w swoim urzędzie certyfikacji? na przepełnienie stosu. Następnie zaimportuj swój CA do Trust Store używanego przez przeglądarkę.
Kroki 2–4 są mniej więcej tym, co robisz teraz dla publicznego serwera, gdy rejestrujesz usługi urzędu certyfikacji, takiego jak Startcom lub CAcert . Kroki 1 i 5 pozwalają uniknąć autorytetu osoby trzeciej i działać jako własny autorytet (komu lepiej zaufać niż tobie?).
Następnym najlepszym sposobem uniknięcia ostrzeżenia przeglądarki jest zaufanie do certyfikatu serwera. Ale niektóre przeglądarki, takie jak domyślna przeglądarka Androida, nie pozwalają na to. Więc nigdy nie będzie działać na platformie.
Problem przeglądarek (i innych podobnych aplikacji klienckich) nie ufających certyfikatom z podpisem własnym będzie dużym problemem w Internecie przedmiotów (IoT). Na przykład, co się stanie po podłączeniu do termostatu lub lodówki w celu zaprogramowania? Odpowiedź brzmi: nic dobrego, jeśli chodzi o wrażenia użytkownika.
Grupa robocza WebAppSec W3C zaczyna przyglądać się temu problemowi. Zobacz na przykład Propozycja: Oznaczanie HTTP jako niezabezpieczonego .
Poniższe polecenia i plik konfiguracyjny tworzą samopodpisany certyfikat (pokazuje również, jak utworzyć żądanie podpisania). Różnią się one od innych odpowiedzi pod jednym względem: nazwy DNS używane dla certyfikatu z podpisem własnym znajdują się w alternatywnej nazwie podmiotu (SAN) , a nie w nazwie zwykłej (CN) .
Nazwy DNS są umieszczane w sieci SAN poprzez plik konfiguracyjny z linią
subjectAltName = @alternate_names
(nie ma sposobu, aby to zrobić za pomocą wiersza poleceń). Następniealternate_names
w pliku konfiguracyjnym znajduje się sekcja (należy ją dostosować do własnych upodobań):Ważne jest, aby umieścić nazwę DNS w sieci SAN, a nie w CN, ponieważ zarówno IETF, jak i fora CA / Browser określają tę praktykę. Określają również, że nazwy DNS w CN są przestarzałe (ale nie zabronione). Jeśli umieścisz nazwę DNS w CN, musi ona zostać uwzględniona w sieci SAN zgodnie z zasadami CA / B. Nie możesz więc uniknąć używania alternatywnej nazwy podmiotu.
Jeśli nie umieścisz nazw DNS w sieci SAN, certyfikat nie będzie sprawdzany pod kątem przeglądarki i innych programów użytkownika zgodnych z wytycznymi CA / Browser Forum.
Powiązane: przeglądarki przestrzegają zasad CA / Browser Forum; a nie zasady IETF. Jest to jeden z powodów, dla których certyfikat utworzony za pomocą OpenSSL (który zwykle jest zgodny z IETF) czasami nie sprawdza się w przeglądarce (przeglądarki stosują się do CA / B). Są to różne standardy, mają różne zasady wydawania i różne wymagania dotyczące walidacji.
Utwórz samopodpisany certyfikat (zauważ dodanie
-x509
opcji):Utwórz prośbę o podpisanie (zauważ brak
-x509
opcji):Wydrukuj certyfikat z podpisem własnym :
Wydrukuj prośbę o podpisanie :
Plik konfiguracyjny (przekazany przez
-config
opcję)W przypadku Chrome może być konieczne wykonanie następujących czynności. W przeciwnym razie Chrome może złożyć skargę, że nazwa pospolita jest nieprawidłowa (
ERR_CERT_COMMON_NAME_INVALID
) . W tym przypadku nie jestem pewien, jaki jest związek między adresem IP w sieci SAN a CN.Istnieją inne zasady dotyczące obsługi nazw DNS w certyfikatach X.509 / PKIX. Zasady znajdują się w tych dokumentach:
RFC 6797 i RFC 7469 są wymienione, ponieważ są bardziej restrykcyjne niż inne dokumenty RFC i CA / B. RFC 6797 i 7469 również nie pozwalają na adres IP.
źródło
alternate_names
sekcji można używać symboli wieloznacznych ? W szczególności subdomeny. Mam pytanie odnoszące się do tej odpowiedzi tutaj: serverfault.com/questions/711596/…Oto opcje opisane w odpowiedzi @ diegows , opisane bardziej szczegółowo z dokumentacji :
Dokumentacja jest w rzeczywistości bardziej szczegółowa niż powyższa; Właśnie to streściłem tutaj.
źródło
XXX
pierwotnym poleceniu należy zastąpić „liczbą dni na poświadczenie certyfikatu”. Domyślnie jest to 30 dni. Na przykład-days XXX
staje się,-days 365
jeśli chcesz, aby twój certyfikat był ważny przez 365 dni. Zobacz dokumentację, aby uzyskać więcej .Od 2020 r. Następujące polecenie spełnia wszystkie Twoje potrzeby, w tym SAN:
W OpenSSL ≥ 1.1.1 można to skrócić do:
Tworzy to certyfikat
example.com
iexample.net
(SAN),10.0.0.1
(SAN),3650
dni (~ 10 lat).Tworzy następujące pliki:
example.key
example.crt
Wszystkie informacje są podawane w wierszu polecenia. Nie ma żadnych interaktywnych danych wejściowych, które Cię denerwują. Nie ma plików konfiguracyjnych, z którymi trzeba by się bawić. Wszystkie niezbędne kroki są wykonywane przez pojedyncze wywołanie OpenSSL : od wygenerowania klucza prywatnego do certyfikatu z podpisem własnym.
Uwaga 1: Parametry kryptograficzne
Ponieważ certyfikat jest samopodpisany i musi zostać ręcznie zaakceptowany przez użytkowników, nie ma sensu używać krótkiego terminu ważności lub słabej kryptografii.
W przyszłości możesz chcieć użyć więcej niż
4096
bitów dla klucza RSA i algorytmu skrótu silniejszego niżsha256
, ale od 2020 r. Są to rozsądne wartości. Są wystarczająco mocne, a jednocześnie obsługiwane przez wszystkie nowoczesne przeglądarki.Uwaga 2: Parametr „
-nodes
”Teoretycznie można pominąć
-nodes
parametr (co oznacza „brak szyfrowania DES”), w którym to przypadkuexample.key
zostanie zaszyfrowane hasłem. Jednak prawie nigdy nie jest to przydatne w przypadku instalacji serwera, ponieważ albo trzeba będzie zapisać hasło na serwerze, albo trzeba będzie wprowadzić je ręcznie przy każdym ponownym uruchomieniu.Uwaga 3: Zobacz także
źródło
//CN=localhost
zamiast/CN=localhost
? Czy właściwa ucieczka pomoże tutaj? Na przykład, czy zastąpienie/CN=localhost
przez"/CN=localhost"
rozwiązuje problem w czysty sposób?Nie mogę komentować, dlatego umieszczę to jako osobną odpowiedź. Znalazłem kilka problemów z zaakceptowaną odpowiedzią jednoliniową:
Oto uproszczona wersja, która usuwa hasło, podnosi bezpieczeństwo, aby ukryć ostrzeżenia i zawiera sugestię w komentarzach do przekazania w -subj, aby usunąć pełną listę pytań:
Zamień „localhost” na dowolną domenę, której potrzebujesz. Będziesz musiał uruchomić pierwsze dwa polecenia jeden po drugim, ponieważ OpenSSL poprosi o podanie hasła.
Aby połączyć oba w plik .pem:
źródło
cat server.crt server.key >foo-cert.pem
. Działa z przykładem wopenssl-1.0.2d/demos/ssl/
FreeBSD 10
OpenLDAP 2.4
zTLS
Nowoczesne przeglądarki zgłaszają teraz błąd bezpieczeństwa dla prawidłowo sformułowanych samopodpisanych certyfikatów, jeśli brakuje im SAN (alternatywna nazwa podmiotu). OpenSSL nie zapewnia wiersza polecenia do określenia tego , więc tutoriale i zakładki wielu programistów są nagle przestarzałe.
Najszybszym sposobem na ponowne uruchomienie jest krótki, samodzielny plik konf:
Utwórz plik konfiguracyjny OpenSSL (Przykład:
req.cnf
)Utwórz certyfikat odwołujący się do tego pliku konfiguracyjnego
Przykładowa konfiguracja z https://support.citrix.com/article/CTX135602
źródło
-sha256
.-extension 'subjectAltName = DNS:dom.ain, DNS:oth.er'
patrz github.com/openssl/openssl/pull/4986-addext
teraz wywoływana .Polecam dodanie parametru -sha256 , aby użyć algorytmu skrótu SHA-2, ponieważ główne przeglądarki rozważają wyświetlanie „certyfikatów SHA-1” jako niezabezpieczonych.
Ta sama linia poleceń z zaakceptowanej odpowiedzi - @diegows z dodanym -sha256
Więcej informacji na blogu Google Security .
Aktualizacja maja 2018 r. Jak wielu zauważyło w komentarzach, że używanie SHA-2 nie dodaje żadnych zabezpieczeń do certyfikatu z podpisem własnym. Ale nadal zalecam używanie go jako dobrego nawyku nieużywania przestarzałych / niepewnych kryptograficznych funkcji skrótu. Pełne wyjaśnienie jest dostępne w części Dlaczego w przypadku certyfikatów powyżej certyfikatu podmiotu końcowego oparcie SHA-1 jest w porządku? .
źródło
To jest skrypt, którego używam w lokalnych skrzynkach, aby ustawić SAN (subjectAltName) w samopodpisanych certyfikatach.
Ten skrypt pobiera nazwę domeny (przyklad.com) i generuje sieć SAN dla * .example.com i przyklad.com w tym samym certyfikacie. Poniższe sekcje zostały skomentowane. Nazwij skrypt (np.
generate-ssl.sh
) I nadaj mu uprawnienia do wykonywania. Pliki zostaną zapisane w tym samym katalogu co skrypt.Chrome 58 i nowsze wymagają ustawienia SAN w certyfikatach z podpisem własnym.
Ten skrypt zapisuje również plik informacyjny, dzięki czemu można sprawdzić nowy certyfikat i sprawdzić, czy SAN jest prawidłowo ustawiony.
Jeśli używasz Apache, możesz odwołać się do powyższego certyfikatu w pliku konfiguracyjnym w następujący sposób:
Pamiętaj, aby ponownie uruchomić serwer Apache (lub Nginx lub IIS), aby nowy certyfikat zaczął obowiązywać.
źródło
localhost
lub127.0.0.1:port#
coś, co byłoby odpowiednieCN
dla czegoś takiego.One-liner 2017:
Działa to również w Chrome 57, ponieważ zapewnia SAN, bez konieczności posiadania innego pliku konfiguracyjnego. Został zaczerpnięty z odpowiedzi tutaj .
Spowoduje to utworzenie pojedynczego pliku .pem zawierającego zarówno klucz prywatny, jak i certyfikat. W razie potrzeby możesz przenieść je do oddzielnych plików .pem.
źródło
/etc/ssl/openssl.conf
prac UbuntuNie mogę komentować, więc dodam osobną odpowiedź. Próbowałem utworzyć samopodpisany certyfikat dla NGINX i było to łatwe, ale kiedy chciałem dodać go do białej listy Chrome, miałem problem. A moim rozwiązaniem było utworzenie certyfikatu głównego i podpisanie przez niego certyfikatu podrzędnego.
Więc krok po kroku. Utwórz plik config_ssl_ca.cnf Uwaga, plik konfiguracyjny ma opcję basicConstraints = CA: true, co oznacza, że ten certyfikat ma być rootem.
Następny plik konfiguracyjny dla certyfikatu podrzędnego.
Pierwszy krok - utwórz klucz główny i certyfikat
Drugi krok tworzy klucz podrzędny i plik CSR - Żądanie podpisania certyfikatu. Ponieważ chodzi o podpisanie certyfikatu podrzędnego przez root i uzyskanie poprawnego certyfikatu
Otwórz terminal Linux i wykonaj to polecenie echo 0
Ca.srl plik tekstowy zawierający kolejny numer seryjny, aby korzystać w hex. Obowiązkowy. Ten plik musi być obecny i zawierać prawidłowy numer seryjny.
Ostatni krok, stwórz jeszcze jeden plik konfiguracyjny i nazwij go config_ca.cnf
Możesz zapytać, dlaczego tak trudne, dlaczego musimy utworzyć jeszcze jedną konfigurację do podpisywania certyfikatu podrzędnego przez root. Odpowiedź jest prosta, ponieważ certyfikat podrzędny musi mieć blok SAN - alternatywne nazwy podmiotu. Jeśli podpiszemy certyfikat podrzędny za pomocą narzędzi „openssl x509”, certyfikat główny usunie pole SAN w certyfikacie podrzędnym. Dlatego używamy „openssl ca” zamiast „openssl x509”, aby uniknąć usunięcia pola SAN. Tworzymy nowy plik konfiguracyjny i każemy mu skopiować wszystkie rozszerzone pola copy_extensions = copy .
Program zadaje 2 pytania: 1. Podpisać certyfikat? Powiedz „T” 2. 1 z 1 certyfikatów jest poświadczonych, zatwierdzasz? Powiedz „Y”
W terminalu widać zdanie ze słowem „Baza danych”, oznacza to plik index.txt, który tworzysz za pomocą polecenia „dotknij”. Będzie zawierał wszystkie informacje według wszystkich certyfikatów utworzonych przez użytkownika „openssl ca”. Aby sprawdzić poprawność certyfikatu, użyj:
Jeśli chcesz zobaczyć, co jest w CRT:
Jeśli chcesz zobaczyć, co jest w CSR:
źródło
Poprawna jest ogólna procedura. Składnia polecenia jest poniżej.
Ostrzeżenia są jednak wyświetlane, ponieważ przeglądarka nie była w stanie zweryfikować tożsamości poprzez sprawdzenie certyfikatu za pomocą znanego ośrodka certyfikacji (CA).
Ponieważ jest to certyfikat z podpisem własnym, nie ma urzędu certyfikacji i można bezpiecznie zignorować ostrzeżenie i kontynuować. Jeśli chcesz uzyskać prawdziwy certyfikat, który będzie rozpoznawany przez kogokolwiek w publicznym Internecie, procedura jest poniżej.
Mam więcej szczegółów na ten temat w poście w Securing the Connection: Creating the Security Certificate with OpenSSL
źródło
Jedna wkładka FTW. Lubię to prostsze. Dlaczego nie użyć jednego polecenia zawierającego WSZYSTKIE potrzebne argumenty? Tak mi się podoba - to tworzy certyfikat x509 i jego klucz PEM:
To pojedyncze polecenie zawiera wszystkie odpowiedzi, które normalnie podajesz dla szczegółów certyfikatu. W ten sposób możesz ustawić parametry i uruchomić polecenie, uzyskać wynik - a potem iść na kawę.
>> Więcej tutaj <<
źródło
Wersja jednoliniowa 2017:
CentOS:
Ubuntu:
Edycja: dodano wcześniejszy Slash do opcji „subj” dla Ubuntu.
źródło
Podczas mojej instalacji serwer Ubuntu zalogował się do:
/var/log/mysql/error.log
Dalsze uwagi:
SSL error: Unable to get certificate from '...'
MySQL może zostać pozbawiony dostępu do odczytu pliku certyfikatu, jeśli nie jest on skonfigurowany przez Apparmors . Jak wspomniano w poprzednich krokach ^, zapisz wszystkie nasze certyfikaty jako
.pem
pliki w/etc/mysql/
katalogu, który jest domyślnie zatwierdzony przez apparmor (lub zmodyfikuj swojego apparmor / SELinux, aby umożliwić dostęp do każdego miejsca, w którym je zapisałeś).SSL error: Unable to get private key
Twoja wersja serwera MySQL może nie obsługiwać
rsa:2048
formatu domyślnegoKonwertuj wygenerowany
rsa:2048
na zwykły zarsa
pomocą:Sprawdź, czy lokalny serwer obsługuje SSL :
Weryfikacja połączenia z bazą danych jest szyfrowana SSL :
Wymagaj ssl dla konkretnego połączenia użytkownika („wymagaj ssl”):
Alternatywny link: długi samouczek dotyczący bezpiecznych połączeń PHP z MySQL za pomocą protokołu SSL .
źródło
Jak szczegółowo omówiono, certyfikaty z podpisem własnym nie są zaufane w Internecie . Możesz dodać samopodpisany certyfikat do wielu, ale nie wszystkich przeglądarek . Alternatywnie możesz zostać własnym urzędem certyfikacji .
Głównym powodem, dla którego nie chce się uzyskać podpisanego certyfikatu od urzędu certyfikacji, jest koszt - Symantec pobiera od 995 do 1 999 USD rocznie za certyfikaty - tylko za certyfikat przeznaczony dla sieci wewnętrznej, Symantec pobiera 399 USD rocznie . Koszt ten można łatwo uzasadnić, jeśli przetwarzasz płatności kartą kredytową lub pracujesz w centrum zysków bardzo dochodowej firmy. To więcej, niż wielu może sobie pozwolić na osobisty projekt, który tworzy się w Internecie, na non-profit działający przy minimalnym budżecie lub jeśli pracujesz w centrum kosztów organizacji - centra kosztów zawsze starają się robić więcej z mniej.
Alternatywą jest użycie certbota (zobacz o certbocie ). Certbot to łatwy w obsłudze automatyczny klient, który pobiera i wdraża certyfikaty SSL / TLS dla twojego serwera WWW.
Jeśli skonfigurujesz certbota, możesz umożliwić mu tworzenie i utrzymywanie certyfikatu wystawionego przez urząd certyfikacji Let's Encrypt .
Zrobiłem to w weekend dla mojej organizacji. Zainstalowałem wymagane pakiety dla certbota na moim serwerze (Ubuntu 16.04), a następnie uruchomiłem polecenie niezbędne do skonfigurowania i włączenia certbota. Najprawdopodobniej potrzebna jest wtyczka DNS dla certbota - obecnie korzystamy z DigitalOcean, ale wkrótce możemy przejść na inną usługę.
Pamiętaj, że niektóre instrukcje nie były w pełni poprawne i zajęło Google trochę czasu, aby je rozgryźć. Za pierwszym razem zajęło mi to sporo czasu, ale teraz myślę, że mógłbym to zrobić w kilka minut.
W przypadku DigitalOcean jednym z obszarów, z którym zmagałem się, było poproszenie mnie o podanie ścieżki do pliku INI poświadczeń DigitalOcean. Skrypt odnosi się do strony Aplikacje i API oraz zakładki Tokeny / Klucz na tej stronie. Musisz mieć lub wygenerować osobisty token dostępu (odczyt i zapis) dla API DigitalOcean - jest to ciąg znaków szesnastkowych o długości 65 znaków. Łańcuch ten należy następnie umieścić w pliku na serwerze WWW, z którego uruchomiono program certbot. Ten plik może mieć komentarz jako pierwszy wiersz (komentarze zaczynają się od #). Druga linia to:
Kiedy już wymyśliłem, jak skonfigurować token odczytu i zapisu dla interfejsu API DigitalOcean, całkiem łatwo było użyć certbota do skonfigurowania certyfikatu wieloznacznego . Zauważ, że nie trzeba konfigurować certyfikatu wieloznacznego, zamiast tego można określić każdą domenę i subdomenę, do której ma się stosować certyfikat. To certyfikat wieloznaczny wymagał pliku INI referencji, który zawierał osobisty token dostępu od DigitalOcean.
Należy pamiętać, że certyfikaty klucza publicznego (znane również jako certyfikaty tożsamości lub certyfikaty SSL) wygasają i wymagają odnowienia. W związku z tym konieczne będzie odnawianie certyfikatu okresowo (ponownie). Dokumentacja certbota obejmuje odnawianie certyfikatów .
Moim planem jest napisanie skryptu, aby użyć komendy openssl, aby uzyskać datę ważności mojego certyfikatu i uruchomić odnowienie, gdy upłynie 30 dni lub mniej, aż do wygaśnięcia. Dodam ten skrypt do crona i uruchamiam go raz dziennie.
Oto polecenie odczytu daty wygaśnięcia certyfikatu:
źródło