С первого февряля, 2023 года сбербанка выпустил собственный самподписанный сертификат, совместно с минцифрой. Официальная документая (по ссылки так же можно скачать сертификат).
Я набросал пример с Deno, версией 1.30.2. На момент написания этой заметки, это является еще эксперементальной опцией. Дока по Deno.
Это будет полезно, в том случае, если вы как и я не хотите устанавливать сертификат в систему. Я думаю, что в целом на любом языке и платформе можно сделать подобное.
const caCert = await Deno.readTextFile("./Cert_CA.pem");
const client = Deno.createHttpClient({ caCerts: [ caCert ] });
const req = await fetch("https://securepayments.sberbank.ru/wiki/doku.php/certificates:start", { client });
console.log(req)
В ответе на запрос у вас должно вернутся что-то на подобии этого:
Response {
body: ReadableStream { locked: false },
bodyUsed: false,
headers: Headers {
"cache-control": "no-store, no-cache, must-revalidate",
connection: "keep-alive",
"content-type": "text/html; charset=utf-8",
date: "Tue, 07 Feb 2023 17:46:48 GMT",
expires: "Thu, 19 Nov 1981 08:52:00 GMT",
pragma: "no-cache",
server: "nginx",
"set-cookie": "DWd6fcb57a725757b22fe830cccebe05e6=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/...",
"transfer-encoding": "chunked",
vary: "Cookie",
"x-powered-by": "PHP/7.4.32",
"x-ua-compatible": "IE=edge,chrome=1"
},
ok: true,
redirected: false,
status: 200,
statusText: "OK",
url: "https://securepayments.sberbank.ru/wiki/doku.php/certificates:start"
В случае не удачи, вы получите это:
Sending fatal alert BadCertificate
error: Uncaught (in promise) TypeError: error sending request for url (https://securepayments.sberbank.ru/wiki/doku.php/certificates:start): error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
const req = await fetch("https://securepayments.sberbank.ru/wiki/doku.php/certificates:start");