В силу разных процессов сейчас уже практически все слышали о таком явлении, как импортозамещение. В частности, сейчас активно замещается импортный продукт MS Exchange исконно русским без единого гвоздя* Communigate Pro. Если мои коллеги найдут время, думаю, они смогут многое рассказать про кластеры, нагруженность и миграцию, я же хочу рассказать одну леденящую кровь, но сильно менее масштабную историю про национальные особенности обновления сертификатов в этом замечательном продукте.
Собственно, краткая предыстория. У меня есть небольшой ноутбук в чулане, на котором до недавнего времени жужжал почтовый сервер в связке Windows + hMailServer. Естественно, в силу импортозамещения мне захотелось поближе познакомиться с Communigate Pro, благо, он весьма скромен в требованиях и бесплатен в некоторых масштабах:
Мы предоставляем полную версию CommuniGate Pro бесплатно для пяти пользователей в целях тестирования и для использования в небольших проектах (компаниях).Знакомство можно начать в разделе «О нас». Там очень хорошо видно, что, в 1997 году была достигнута веха «First reliase», слово «Release» маркетологи Stalker, Inc научились писать только к 2004 году, а сделать для русскоязычного сайта русскоязычные маркетинговые материалы не смогли до сих пор.
RequireAPOP = NO;
[root@mx ~]# curl -u postmaster:password -k 'https://127.0.0.1:9100/cli/getdomainsettings'
[root@mx ~]#
[root@mx ~]# curl -u postmaster:password -k 'https://127.0.0.1:9100/cli/?command=getdomainsettings'
{CAChain=[тут-была-цепочка-сертификатов];CertificateType=YES;ClientCertCA="Let's Encrypt Authority X3";ClientIPs="";DKIMenabled=YES;DKIMkey=[тут-был-ключ-DKIM];DKIMselector=dkim;DomainComment="";IPMode="All Available";PrivateSecureKey=[тут-был-закрытый-ключ];SecureCertificate=[тут-был-сертификат];TrustedCertificates=();}
[root@mx ~]# curl -u postmaster:password -k 'https://127.0.0.1:9100/cli/?command=getdomainsettings&domainName=test'
{CAChain=[тут-была-цепочка-сертификатов];CertificateType=YES;ClientCertCA="Let's Encrypt Authority X3";ClientIPs="";DKIMenabled=YES;DKIMkey=[тут-был-ключ-DKIM];DKIMselector=dkim;DomainComment="";IPMode="All Available";PrivateSecureKey=[тут-был-закрытый-ключ];SecureCertificate=[тут-был-сертификат];TrustedCertificates=();}
На правах рекламы.Как оказалось, http-запрос не понимает именованные параметры. Только позиционные, только хардкор:
Да, у них есть чатик. И в нём даже отвечают специалисты. Даже безо всякой корпоративной подписки.
[root@mx ~]# curl -u postmaster:password -k 'https://127.0.0.1:9100/cli/?command=getdomainsettings%20test'
{}
[root@mx ~]#
[root@mx ~]# curl -u postmaster:password -k 'https://127.0.0.1:9100/cli/' --data-urlencode 'command=getdomainsettings test'
{}
[root@mx ~]#
[root@mx ~]# curl -u postmaster:password -k 'https://127.0.0.1:9100/cli/' --data-urlencode "command=updatedomainsettings test {PrivateSecureKey=[`grep -v '\-\-' /etc/letsencrypt/live/domain.my/privkey.pem | tr -d '\n'`];}"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> domain.my</title>
<link rel="stylesheet" href="/SkinFiles/domain.my/Pronto/style.css" type="text/css" />
<meta http-equiv="x-dns-prefetch-control" content="off" />
<meta name="referrer" content="no-referrer" />
</head>
<body background="/SkinFiles/domain.my/Pronto/bodybgcolor.gif">
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="FormCharset" value="utf-8" />
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td height="25"> </td></tr>
<tr valign="middle"><td align="center" bgcolor="#ffcccc" class="externalError">private key data is corrupted</td></tr>
</table>
</form>
</body>
</html>
[root@mx ~]#
[root@mx ~]# cat /etc/letsencrypt/live/domain.my/privkey.pem
-----BEGIN PRIVATE KEY-----
многа
букаф
закрытого
ключа
-----END PRIVATE KEY-----
[root@mx ~]#
grep -v '\-\-' /etc/letsencrypt/live/domain.my/privkey.pem | tr -d '\n'
[root@mx ~]# openssl rsa -in /etc/letsencrypt/live/domain.my/privkey.pem
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
вот ровно
то, что надо,
только разбитое
на строчки
-----END RSA PRIVATE KEY-----
[root@mx ~]#
curl --user postmaster:password -k 'https://127.0.0.1:9100/cli/' --data-urlencode "command=updatedomainsettings domain.my {SecureCertificate=[`grep -v '\-\-' /etc/letsencrypt/live/domain.my/cert.pem | tr -d '\n'`];PrivateSecureKey=[`openssl rsa -in /etc/letsencrypt/live/domain.my/privkey.pem 2> /dev/null | grep -v '\-\-' | tr -d '\n'`];CAChain=[`grep -v '\-\-' /etc/letsencrypt/live/domain.my/chain.pem | tr -d '\n'`];}"
К сожалению, не доступен сервер mySQL