blob: 5687fc60b0416709a5acad613e24f5043600eeb3 [file] [log] [blame]
Harald Welte5bbb1442023-12-11 12:46:47 +01001osmo-smdpp
2==========
3
4`osmo-smdpp` is a proof-of-concept implementation of a minimal **SM-DP+** as specified for the *GSMA
5Consumer eSIM Remote SIM provisioning*.
6
7At least at this point, it is intended to be used for research and development, and not as a
8production SM-DP+.
9
10Unless you are a GSMA SAS-SM accredited SM-DP+ operator and have related DPtls, DPauth and DPpb
11certificates signed by the GSMA CI, you **can not use osmo-smdpp with regular production eUICC**.
12This is due to how the GSMA eSIM security architecture works. You can, however, use osmo-smdpp with
13so-called *test-eUICC*, which contain certificates/keys signed by GSMA test certificates as laid out
14in GSMA SGP.26.
15
16At this point, osmo-smdpp does not support anything beyond the bare minimum required to download
17eSIM profiles to an eUICC. Specifically, there is no ES2+ interface, and there is no built-in
18support for profile personalization yet.
19
20osmo-smdpp currently
21
22* always provides the exact same profile to every request. The profile always has the same IMSI and
23 ICCID.
24* **is absolutely insecure**, as it
25
26 * does not perform any certificate verification
27 * does not evaluate/consider any *Matching ID* or *Confirmation Code*
28 * stores the sessions in an unencrypted _python shelve_ and is hence leaking one-time key materials
29 used for profile encryption and signing.
30
31
32Running osmo-smdpp
33------------------
34
35osmo-smdpp does not have built-in TLS support as the used *twisted* framework appears to have
36problems when using the example elliptic curve certificates (both NIST and Brainpool) from GSMA.
37
38So in order to use it, you have to put it behind a TLS reverse proxy, which terminates the ES9+
39HTTPS from the LPA, and then forwards it as plain HTTP to osmo-smdpp.
40
41nginx as TLS proxy
42~~~~~~~~~~~~~~~~~~
43
44If you use `nginx` as web server, you can use the following configuration snippet::
45
46 upstream smdpp {
47 server localhost:8000;
48 }
49
50 server {
51 listen 443 ssl;
52 server_name testsmdpplus1.example.com;
53
54 ssl_certificate /my/path/to/pysim/smdpp-data/certs/DPtls/CERT_S_SM_DP_TLS_NIST.pem;
55 ssl_certificate_key /my/path/to/pysim/smdpp-data/certs/DPtls/SK_S_SM_DP_TLS_NIST.pem;
56
57 location / {
58 proxy_read_timeout 600s;
59
60 proxy_hide_header X-Powered-By;
61 proxy_set_header X-Real-IP $remote_addr;
62 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
63 proxy_set_header X-Forwarded-Proto https;
64 proxy_set_header X-Forwarded-Port $proxy_port;
65 proxy_set_header Host $host;
66
67 proxy_pass http://smdpp/;
68 }
69 }
70
71You can of course achieve a similar functionality with apache, lighttpd or many other web server
72software.
73
74
75osmo-smdpp
76~~~~~~~~~~
77
78osmo-smdpp currently doesn't have any configuration file or command line options. You just run it,
79and it will bind its plain-HTTP ES9+ interface to local TCP port 8000.
80
81The `smdpp-data/certs`` directory contains the DPtls, DPauth and DPpb as well as CI certificates
82used; they are copied from GSMA SGP.26 v2.
83
84The `smdpp-data/upp` directory contains the UPP (Unprotected Profile Package) used.
85
86
87DNS setup for your LPA
88~~~~~~~~~~~~~~~~~~~~~~
89
90The LPA must resolve `testsmdpplus1.example.com` to the IP address of your TLS proxy.
91
92It must also accept the TLS certificates used by your TLS proxy.
93