Haýyşlara gol çekmek we barlamak
Haýyşnamanyň goly iberijiniň hakykylygyny we mazmunynyň bitewiligini subut edýär. TLS-den tapawutlylykda (bu kanaly goraýar), amaly gol her habary barlanylýan we proksi, nagt pul we gijikdirilen eltip bermäge çydamly edýär.
Maksatlar:1. Hakykylyk (kim iberdi) we bitewilik (üýtgemedi).
2. Gaýtalanmazlyk (replikalardan goramak).
3. Ulagdan aýrylmak (HTTP, nobatlaryň, webhuklaryň üstünde işleýär).
4. Barlagdan geçmeklik (birnäçe aýdan soň gaýtalanýan barlag).
1) Howplaryň modeli (iň az)
Ýolda bedeni/sözbaşylary çalyşmak.
Bellik (kanuny haýyşyň gaýtalanmagy).
Goluň sözbaşylaryny downgrade/strip.
Integrasiýanyň syrlaryny ogurlamak.
Sinhron däl sagat (clock skew) we uzyn nobatlar.
2) Başlangyç saýlamak
HMAC (simmetriýa): ýönekeý we çalt, açar iki tarapda saklanýar. B2B-webhook we içerki API üçin amatly.
RSA/ECDSA (asimmetriýa): iberijiniň şahsy, alyjynyň açyk açary. Açyk integrasiýa üçin we syry paýlaşmazlyk möhüm bolanda amatlydyr.
mTLS: ulag derejesinde özara tassyklama; köplenç NMAS/beden goly bilen birleşdirilýär.
JWT/JWS: bearer-tokenler we öz-özüne ýeterlik bellikler üçin amatly; Bedene gol çekmek üçin JWS Detached/HTTP Message Signatures kanonikalizasiýasyny ulanmak has gowudyr.
HTTP Message Signatures (Soragyň saýlanan bölekleriniň goly): REST üçin häzirki zaman çemeleşmesi.
Maslahat: webhuklar üçin - HMAC + timestamp + nonce + bedeniň kanonikalizasiýasy; köpçülige açyk API üçin - HTTP Message Signatures ýa-da JWS; ýokary töwekgelçilikde - mTLS goşuň.
3) Kanonikalizasiýa (nämä gol çekýäris)
Iki tarap tarapyndan birmeňzeş dikeldilýän kesgitlenen setire gol çekmeli.
Salgylanma düzümi:
method \n path_with_query_normalized \n content-type \n digest: SHA-256=BASE64(SHA256(body)) \n x-ts: <unix iso> \n x-nonce: <uuid> \n host \n x-tenant: <tenant_id> \n
Jemleýji setiri:
canonical = join("\n", fields)
signature = HMAC(secret, canonical) # или ECDSA_sign(private_key, canonical)
Düzgünler:
- Query parametrleriniň ugruny we tertibini kadalaşdyryň.
- Boşluklar/unikod/registr- belläň (mysal üçin, lower-case sözbaşylary, trim).
- Uly jisimler - "bolşy ýaly" däl-de, "Digest".
4) Sözbaşylaryň görnüşi
HMAC üçin mysal:
X-Signature-Alg: hmac-sha256
X-Signature: v1=hex(hmac),ts=1730379005,nonce=550e8400-e29b-41d4-a716-446655440000,kid=prov_42
Digest: SHA-256=BASE64(SHA256(body))
X-Tenant: brand_eu
Asimmetriýa üçin mysal (ECDSA P-256):
Signature: keyId="prov_42", alg="ecdsa-p256-sha256",
ts="2025-10-31T12:30:05Z", nonce="550e...", headers="(request-target) host digest x-tenant",
sig="BASE64(raw_signature)"
Nirede 'kid '/' keyId' sanawdan açary saýlamaga mümkinçilik berýär (aýlawa serediň).
5) Kabul ediş tarapynda barlamak
Pseudo:python def verify(request):
1) Basic assert abs (now () - request. ts) <= ALLOWED_SKEW # напр., 300 с assert not replayed(request. nonce, window = TTL) # store nonce/ts in KV
2) Restore canonical canonical = build_canonical (
method=request. method,
path=normalize_path(request. path, request. query),
content_type=request. headers["content-type"],
digest=hash_body(request. body),
ts=request. ts,
nonce=request. nonce,
host=request. headers["host"],
tenant=request. headers. get("x-tenant")
)
3) Get the key key = key_registry. get(request. kid) # secret (HMAC) или public key (ECDSA)
4) Verify if request signature. alg. startswith("hmac"):
ok = hmac_compare(key. secret, canonical, request. signature)
else:
ok = asym_verify(key. public, canonical, request. signature)
5) Solution if not ok: return 401, "SIGNATURE_INVALID"
return 200, "OK"
Constant-time deňeşdirmesi HMAC, saklamak 'nonce '/' (ts, event_id)' çalt KV (TTL ≥ eltip bermek penjiresi).
6) Anti-rap we penjireler
Timestamp + Nonce: '± Δ' -den uly haýyşlary (mysal üçin, 5 minut) we bu penjirede nonce gaýtalamalaryny ret ediň.
Webhook üçin: durnukly 'event _ id' we inbox tablisasyny ulanyň - bu diňe nonce-den has ygtybarly.
Gaýtadan eltip bermek (retra) täzelerini döretmän, şol bir ts/nonce/event_id peýdalanmalydyr.
7) Köp tenant we sebitler
Açarlary saklaň per tenant/region: 'kid = <tenant>: <region>: <key _ id>'.
Gizlin howuzlary we çäkleri bölüň; data residency.
Başlyklarda/kanonikalizasiýada 'X-Tenant' -y görkeziň we sebit barlanylýan kontekstiň bir bölegidir.
8) Açarlary dolandyrmak we aýlanmak
Açarlar sanawy (KMS/Vault): 'kid', görnüşi, algoritmi, ýagdaýy ('active', 'deprecating', 'retired'), 'valid _ from/valid _ to'.
Dual-secret: häzirki we indiki açary bir wagtyň özünde saklaň (kabul ediji ikisini hem kabul edýär).
Meýilnama boýunça we waka boýunça aýlaw (eglişik).
Key pinning (mümkin boldugyça) we açar materiallaryna elýeterliligi çäklendirmek.
Açarlara we olar bilen hereketlere giriş ýazgylary.
9) mTLS we OAuth bilen utgaşma
mTLS sertifikat derejesinde kanaly we "kimdigiňizi" barlaýar.
Gol habary goraýar (proxy/kessi/nobatlar arkaly peýdalydyr).
OAuth/JWT tassyklamany/ygtyýarnamany doldurýar, ýöne bedeniň bitewiligini kepillendirmeýär (eger kanonikalizasiýada gol çekilmese).
Iň oňat tejribe: mTLS + beden goly (Digest) + HMAC/ECDSA + gysga 'ts' - interwal.
10) Ýalňyşlyklar we jogap kodlary
'401 SIGNATURE_INVALID' - nädogry gol/algoritm.
'401 KEY_REVOKED' -' kid 'hakyky däl/möhleti geçen.
'400 TIMESTAMP_OUT_OF_RANGE' - sagat/penjire.
'409 NONCE_REPLAYED' - gaýtalanma tapyldy.
'400 DIGEST_MISMATCH' - beden üýtgedildi.
'415 UNSUPPORTED_ALGORITHM' - çözülmedik' alg '.
'429 TOO_MANY_ATTEMPTS' - açar/tenant boýunça trottling.
Maşyn okalýan 'error _ code' -de takyk sebäbini uruň; syrlary/kanonikalizasiýany "bolşy ýaly" yzyna gaýtarmaň.
11) Gözegçilik we audit
Metrikler:- `verify_p95_ms`, `verify_error_rate`, `digest_mismatch_rate`, `replay_blocked_rate`, `alg_usage{hmac,ecdsa}`, `clock_skew_ms`.
- Loglar (gurluş): 'kid', 'alg', 'tenant', 'region', 'ts', 'nonce', 'digest _ hash', 'decision', 'reason'.
- Söwda: 'signature' atributlary. kid`, `signature. alg`, `signature. ts_skew`.
- Audit: üýtgewsiz aýlanyş, kabul ediş açarlaryny we baýdaklaryny ulanmak žurnaly.
12) Öndürijilik
Bedeni akym bilen kesiň (ýatda saklamaň).
Gysga TTL we waka boýunça maýyplyk bilen 'kid' aç açarlaryny kesiň.
edge/gateway sahypasynda deslapky barlaglary geçiriň (ts/nonce/format).
HMAC ECDSA-dan has çalt; ECDSA daşarky integrasiýa we "bölünmeýän" açarlar üçin has amatlydyr.
13) Synag
Fikstura toplumlary: birmeňzeş haýyşlar → birmeňzeş kanonikalizasiýa/gol; "hapa" boşluklar/query/başlyklaryň tertibi → durnukly.
Negative: nädogry 'kid/alg', üýtgedilen beden/host, nonce gaýtalamak, köne ts, clock skew.
Property-based: Islendik ekwiwalent soraglar bir canonical setirini berýär.
Interop: Dil synaglary (Go/Java/Node/Python).
Chaos: gijikdirmeler, retralar, "uçuş" açaryny üýtgetmek.
14) Oýun kitaplary (runbooks)
1. 'SIGNATURE _ INVALID'
Açarlaryň aýlanyşyny, synp synpyny, iberijiniň kanonikalizasiýasynyň üýtgemegini barla.
Köne 'kid' üçin 'dual-accept' -i wagtlaýyn açyň, hyzmatdaşa habar beriň.
2. 'REPLAYED'
Nonce saklaýyş TTL-ni köpeltmek, iberijide retrainerleri barlamak, skew synyny barlamak.
edge-de hyýanatçylykly IP/ASN-i ýapyň.
3. 'DIGEST _ MISMATCH' köpçülikleýin
Proxy/gysyş/sözbaşylaryň täzeden ýazylmagyny barlamak; kanonikalizasiýa görnüşini düzetmek.
Beden/sözbaşy bozýan araçylary öçürmek.
4. Açaryň bozulmagy
Derrew revoke 'kid', 'next _ kid' -e terjime etmek, ähli syrlary/bellikleri, giriş auditini dikeltmek.
15) Adaty ýalňyşlyklar
"Bedeniň bir bölegine" ýa-da JSON-a buýrugy düzmezden gol çekiň → Meýdançalaryň üýtgemegine gowşaklyk.
'Digest' → proksiniň ýoklugy bedeni duýman üýtgedip biler.
nonce → -siz uzyn penjire açykdyr.
KMS/Vault bolmasa gurşaw üýtgeýjilerinde syrlary saklamak.
Constant-time däl goly deňeşdiriň.
Kanonikalizasiýada 'host '/' path' -ni äsgermezlik et → ugrukdyrma hüjümleri.
Dürli tenantlaryň we sebitleriň 'kid' -ini garyşdyryň.
16) Azyk önüminden öň çek-sanawy
- Kanonikalizasiýa formaty kesgitlenildi (method, path + query, content-type, Digest, ts, nonce, host, tenant).
- HMAC/ECDSA 'kid', açar sanawy we dual-secret bilen amala aşyryldy.
- Anti-gürlemek (nonce + ts) we webhook inbox/event_id saklamak goşuldy.
- Düzedilen ýalňyşlyk kodlary/retraj syýasaty we trottling per tenant/key.
- Syn edilişi: metrikler verify, logi, tracking, partlamalar üçin aladalar.
- Açarlaryň aýlanmagy awtomatlaşdyryldy; audit we elýeterlilik hukuklary çäklidir.
- Kanonikalizasiýa we dilara gabat gelmek üçin synag toplumlary.
- 3-4 dilde we fiksturalary bolan integratorlar üçin resminamalar.
- mTLS duýgur integrasiýa üçin açykdyr; JWT diňe bedeniň goluny çalyşman, goşmaça hökmünde ulanylýar.
Netije
Haýyşlara gol çekmek we barlamak "bir sözbaşy" däl-de, düzgün-nyzam: anyk kanonikalizasiýa, gysga wagt penjireleri, anti-bellikler, açarlaryň aýlanmagy we syn edilmegi. Ähli integrasiýalar (API we webhuklar) üçin bir standart guruň, 'kid '/KMS ulanyň, aýlananda iki açary kabul ediň, konturalaryňyz çalşyklara çydamly, öňünden aýdyp boljak we audit üçin amatly bolar.