PSN – CJSE (Police/SPI) and Courtstore · MPDIMZPSNP01
What it is
| Item | Value |
|---|---|
| VM |
MPDIMZPSNP01.cp.cjs.hmcts.net — RHEL 7.4 (2018 image), Standard_DS2_v2, no zone / availability set |
| IP / subnet | 10.200.65.44 · SN-MPD-IMZ-PSNP-FTP-01 (10.200.65.40/29) · NSG NS-MPD-IMZ-FTPS-INNER · UDR UR-IMZ-FTPS
|
| Software | HAProxy (role psn_proxy) — 3 services + stats page |
What it’s used for
From the prod HAProxy config and NSG flow analytics:
| Port | Service | Allowed source | Backend | Live traffic |
|---|---|---|---|---|
| 7081 | CJSE / Police → CP (SPI case submissions). Forwards only Host: apigw.cjscp.org.uk
|
PSN 51.231.76.64/26 | APIM sp-prd-apim-int 10.202.65.100:443 (Host → sp-prd-apim-int-gw.cp.cjs.hmcts.net) |
✅ Active (from 51.231.76.85 / .118) |
| 7080 | CP → CJSE (results / SPI out) | APIM subnet 10.202.65.96/27 |
exchange-integration-services-stream.service.justice.gov.uk:7080 (exiss.q-solution.net, 51.231.76.88) |
✅ Active |
| 443 | CP → Courtstore (CMS). mTLS client cert client.cms.court.store.justice.gov.uk.pem, TLS 1.2, verify required |
APIM subnet + function apps 10.202.68.160/28 |
cms.court.store.justice.gov.uk 35.177.3.3 (CACI, AWS) |
✅ Busiest path (about 1M flows a week) |
| 8090 | HAProxy stats (basic auth) | — | — | — |
APIM’s business APIs reach PSNP01 by hard-coded IP in named values (hmcts/cpp-azure-api-management, prd/sp-prd-apim-int):
| Named value | Value | Used by |
|---|---|---|
cjse-endpoint-base-url |
http://10.200.65.44:7080 |
fa-prd-ccp0101-casefilter → spiout
|
route-to-cjse-base-url |
http://10.200.65.44:7080 |
fa-prd-ccp0101-casefilter → cjsesubmitcaseapi (relay) |
courtstore-endpoint-base-url |
https://10.200.65.44/commonplatform/caseinformation |
fa-prd-ccp0101-casefilter → courtstore
|
Network flow
A. CJSE inbound — Police / CJSE → CP (port 7081)
┌─ PSN / CJSE (third party) ─────────────────────────────────────────────┐
│ 1. CJSE Exchange (51.231.76.85 / .118) │
└──────┼─────────────────────────────────────────────────────────────────┘
║ PSN
┌──────▼─ Cloud Gateway (third party) ───────────────────────────────────┐
│ 2. Firewall rule LIVE-GRP-PSN-POL-CJSE-SPI-IN — NAT to CP proxy VIP │
└──────┼─────────────────────────────────────────────────────────────────┘
║ IPsec tunnel (LEG-CGI / LEG-CGI-DR)
┌──────▼─ Crime Live tenant (CP) ────────────────────────────────────────┐
│ 3. VG-MPD-OLDAZURE-01 (VPN gateway) │
│ ▼ │
│ 4. MPDIMZPSNP01 :7081 (HAProxy) │
│ │ only Host: apigw.cjscp.org.uk is forwarded │
│ │ HTTPS 443, Host → sp-prd-apim-int-gw.cp.cjs.hmcts.net │
│ ▼ │
│ 5. APIM sp-prd-apim-int (10.202.65.100) → CP services │
└────────────────────────────────────────────────────────────────────────┘
B. CJSE outbound — CP → Police / CJSE (port 7080)
┌─ Crime Live tenant (CP) ───────────────────────────────────────────────┐
│ 1. APIM sp-prd-apim-int — casefilter APIs (spiout, cjsesubmitcaseapi) │
│ │ HTTP 7080 → http://10.200.65.44:7080 (APIM named value) │
│ ▼ │
│ 2. MPDIMZPSNP01 :7080 (HAProxy) │
│ │ only accepts the APIM subnet 10.202.65.96/27 │
│ ▼ │
│ 3. VG-MPD-OLDAZURE-01 (VPN gateway) │
└──────┼─────────────────────────────────────────────────────────────────┘
║ IPsec tunnel (LEG-CGI / LEG-CGI-DR)
┌──────▼─ Cloud Gateway (third party) ───────────────────────────────────┐
│ 4. Firewall rule LIVE-HMCTS-CRIME-PROXY-PSN-OUT-44 │
└──────┼─────────────────────────────────────────────────────────────────┘
║ PSN
┌──────▼─ PSN / CJSE (third party) ──────────────────────────────────────┐
│ 5. CJSE Exchange │
│ exchange-integration-services-stream.service.justice.gov.uk:7080 │
│ (51.231.76.88) │
└────────────────────────────────────────────────────────────────────────┘
C. Courtstore — CP → Courtstore (port 443, mutual TLS)
┌─ Crime Live tenant (CP) ───────────────────────────────────────────────┐
│ 1. casefilter function apps → APIM sp-prd-apim-int (courtstore API) │
│ │ HTTPS → https://10.200.65.44/commonplatform/caseinformation │
│ ▼ │
│ 2. MPDIMZPSNP01 :443 (HAProxy) │
│ │ TLS ends here; new TLS 1.2 session using the Courtstore │
│ │ client certificate (mutual TLS) │
│ ▼ │
│ 3. Route table UR-IMZ-FTPS: 35.177.3.3/32 → 10.200.76.4 │
│ ▼ │
│ 4. Barracuda NGF firewall pair (MPDIMZBNGF001/101) → Internet │
└──────┼─────────────────────────────────────────────────────────────────┘
║ Internet
┌──────▼─ Courtstore (CACI, AWS) ────────────────────────────────────────┐
│ 5. cms.court.store.justice.gov.uk (35.177.3.3:443) │
└────────────────────────────────────────────────────────────────────────┘
How it’s managed
| Item | Detail |
|---|---|
| VM IaC |
hmcts/cpp-automation-terraform → environments/live/mpd/integration_dmz/60-virtual_machines.tf
|
| Config | Ansible sp-ansible/templates/haproxy-psn.cfg.j2Prod vars: sp-ansible/group_vars/70_environment_mpd/psn.yml (crime-idam-automation-ansible / rota-automation-ansible)Role vars: sp-ansible/group_vars/50_role_psn_proxy/*
|
| Recent config changes | APIM backend IP, Courtstore cert · DTSPO-230444 (Courtstore backend) · DTSPO-22246 (CJSE backend) |
| APIM config |
hmcts/cpp-azure-api-management (extracted from APIM via ADO) |
| Secrets | Vault (certificates, keys) |
| Monitoring | Dynatrace OneAgent (installed on the VM and running) |
| Third parties | CJSE Exchange (Sopra Steria / Q-Solution) · Courtstore (CACI) · Cloud Gateway (PSN routing) — see Third Party Contacts SRE |
| Backup | ❌ None. No Azure Backup in any vault, no disk backup, no snapshots or restore points. Single 32 GB Standard HDD (LRS) OS disk |
Status / planned change
Migration to AppGW / APIM-direct: started, stalled — not cut over in any environment.
| Step | Live (prd) | Non-live (SIT) | Ref |
|---|---|---|---|
| AppGW listeners built | ✅ cjse.mlv.lv.cjscp.org.uk (OUT)✅ apigw.cjscp.org.uk:7081 (IN) |
✅ cjse.mnl.nl.cjscp.org.uk (OUT)✅ apigw.sit.cjscp.org.uk (IN) |
DTSPO-25472, DTSPO-26195/26196, DTSPO-27129/27130 |
| APIM backends created | ✅ cjse → AppGW✅ cms-courtstore → direct |
✅ same pattern | DTSPO-27156 |
| Connectivity tested | — | ✅ cjse-connection-test, courtstore-connection-test-mtls APIs only |
— |
| Business APIs cut over | ❌ named values → 10.200.65.44 | ❌ named values → 10.88.145.44 (non-live PSN proxy) | — |
| Traffic on new path | ❌ AppGW-OUT CJSE pool 0 requests in 90 days; AppGW-IN 0 requests | ⚠️ not checked (non-live tenant) | — |
- Courtstore direct from APIM: intent stated in DTSPO-26284 (“Courtstore will be called by APIM directly”); that PR changed the non-live AppGW config only.
Risks
- No backup of any kind (VM, disk or snapshot).
- RHEL 7 is out of maintenance; single VM with no zone.
Improvements / future
- Immediate
- Enable Azure Backup (DR gap — no backup of any kind today).
- Near term — finish the stalled migration
- Repoint the prd APIM named values (
cjse-endpoint-base-url,route-to-cjse-base-url) to thecjsebackend (AppGW). - Repoint
courtstore-endpoint-base-urltocms-courtstore(direct mTLS). - Cut CJSE inbound 7081 over to AppGW-IN.
- Repoint the prd APIM named values (
- Future: decommission
MPDIMZPSNP01and its non-live equivalent, and remove the related Cloud Gateway rules (*-CRIME-PROXY-PSN-*,*-CRIME-PROXY-SPI-*).
This page was last reviewed on 2 November 2026.
It needs to be reviewed again on 2 May 2027
by the page owner platops-build-notices
.
This page was set to be reviewed before 2 May 2027
by the page owner platops-build-notices.
This might mean the content is out of date.