Како OpenVPN го решава сертификатот и клучот: вграден PEM или патека
Истата директива носи или патека до датотека или вграден PEM објект. Прочитајте која од двете ја користи вчитаниот профил пред да преместите сертификати.
Пораката вели дека OpenVPN не може да вчита вграден сертификат, а името на датотеката што го пазите во главата вели спротивно. Она што го примил парсерот е поважно од она што го содржи датотечниот систем, зашто директивата cert прима два целосно различни вида вредност. Едната е патека што ја отвора; другата е PEM текст што пристигнал внатре во конфигурацијата. Додека не знаете каков облик добил клиентот што работи, секоја поправка е претпоставка.
Два облика на чување, една директива
Директивите cert, key и ca примаат патека или вграден блок. Кога вредноста е патека, OpenVPN ја отвора таа датотека и го чита објектот од дискот. Кога конфигурацијата содржи блок ограничен со cert ознаки, истата директива наместо тоа ја троши содржината меѓу тие ознаки, и не учествува посебна датотека.
Двата облика на крајот даваат ист вид објект, затоа работно распоредување може да преминува меѓу нив без ниту една друга промена. Профил што носи вграден клиентски сертификат и приватен клуч е самодоволен, а неговото копирање на друга машина работи и без копирање на директориумот со сертификати.
Обратното не е точно. Ставањето client.crt покрај профил што ги вградува сопствените податоци не менува ништо, зашто ништо во конфигурацијата не упатува на таа датотека. Ова е најчестата причина зошто датотека што очигледно постои изгледа занемарена.
Како вградениот блок станува објект
Вградената содржина се извлекува од конфигурацијата и ѝ се предава на PEM парсерот како текст. Тој парсер очекува вообичаените граници: ред BEGIN, base64 товар и соодветен ред END. Ако блокот бил отсечен од неуспешно копирање, завиткан во HTML од страница за преземање или отворен во уредник што ги нормализирал цртичките, парсерот не успева на содржина што изгледа присутна.
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
Затоа и формулацијата на грешката е измамничка. Зборот вграден опишува каде погледнал вчитувачот, а не што нашол таму. Датотека наведена во конфигурација и објект вграден во неа можат да го дадат истиот приговор кога основните бајти се неупотребливи.
Проверете кој облик вчитаниот профил навистина го користи, а не која датотека случајно ја отворил вашиот уредник:
grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn
Како се решава упатувањето на патека
Вредноста на патека се отвора во однос на работниот директориум на клиентот, а не на директориумот што ја содржи конфигурацијата. Под systemd тој работен директориум е она што го поставува единицата, а интерактивното извршување од вашата обвивка наследува нешто сосема друго. Затоа истата конфигурациска датотека може да работи при рачно тестирање, а да не успее како служба.
Релативните патеки го наследуваат истото двосмисленост. Кога ќе видите голо име на датотека, прашајте кој е тековниот директориум на процесот во производство, наместо да претпоставите дека се совпаѓа со вашиот терминал.
За сертификат што се чува одделно, офлајн анализата го потврдува објектот пред да отстранувате грешки во нешто над него:
openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check
Тие команди докажуваат дека датотеките се читливи и структурно валидни. Тие не докажуваат дека партнерот му верува на издавачот, дека сертификатот останува во рокот на важност или дека клучот му припаѓа.
Што може и што не може да ви каже грешката на парсерот
Неуспехот при парсирање го лоцира проблемот на еден влез и една фаза. Не ви кажува кој од двата облика на чување го користел клиентот и не ви кажува дали објектот би бил прифатен. Тоа се одделни прашања со одделни докази.
Откако парсирањето ќе успее, следниот неуспех припаѓа на подоцнежна фаза. Одбивање на доверба, несовпаѓање на намената или несовпаѓање на клучот ги пријавува партнерот или TLS слојот, а не вчитувачот. Повторното заменување на истата датотека нема да ја помести таа грешка.
Држете ја чувствителната половина надвор од јавни извештаи додека истражувате. Споделете ги имињата на директивите, текстот на грешката и структурата на блокот, со отстранет клучен материјал и секој идентификувачки товар. Прирачникот openvpn(8) ги документира двата облика на датотечните директиви и однесувањето на работниот директориум зад нив.