aboutsummaryrefslogtreecommitdiff
path: root/myrpki.rototill/PLAN
blob: e42ee79f0b48504e2c2877bfc70824a690af81ce (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
-*- Text -*- 
$Id$

plan for new myrpki setup tools.  need better name for them, among
other things.

- dig out old proposed better names for myrpki and myirbe, use those.
  bpki.myrpki => bpki.resources (or perhaps bpki/resources)
  bpki.myirbe => bpki.servers

  bpki.resources is used for tls client and all cms in up-down and
  object publication.

  bpki.servers is used for all tls server certs, and is also used for
  tls client and all cms in left-right and publication control.

  had proposed new names for .py scripts, dig those out but will also
  be creating a bunch of new scripts here to confuse the issue.

- for the moment i'm completely ignoring security of the new setup
  protcol.  this clearly will not fly even in the short run, but let's
  start by figuring out who needs to do what to whom before worrying
  about how to prove that everybody is who they claim to be.

- need a script to create new self (resource holding identity).  this
  creates bpki.resources, takes that and [myrpki]handle variable,
  packages that as an xml blob.

- send self xml blob to parent, current theory seems to be upload to a
  web form.  parent responds with a lot of the stuff currently in
  parents.csv, and perhaps also with a hint about where to publish,
  all packaged as an xml blob.  well, maybe (also?) a link to
  publication service that i can click on?

  current fields in parents.csv:

  # Syntax: <parent_handle> <service_uri> <cms_bpki_cert_filename> <https_bpki_cert_filename> <myhandle> <sia_base>

  <parent_handle> is a private matter, that probably turns into name
  of the parent xml blob when i store it on disk, nobody else's
  business what i call it

  <service_uri> and <myhandle> are supplied by parent, based on
  whatever name parent uses for itself and what name it uses for me.
  i've told it what i call myself, but parent probably has its own
  name for me.

  <cms_bpki_cert_filename> and <https_bpki_cert_filename> parent just
  supplies, nothing complex there (well, except for boostrap process
  for rootd, but that's a separate mess).

  <sia_base> still makes my head hurt.  not just me.

- also send self xml blob to hosting, who may or may not be another
  aspect of myself.  hosting entity supplies (new? update of mine?)
  xml blob containing bpki.servers and rpkid service url
  ([myirbe]rpkid_base url value).  will need to supply all of this to
  any children.

  [myirbe]pubd_base makes my head hurt.  why is <sia_base> in
  parents.csv while pubd_base is in [myirbe] ?  gah....  along with
  everything else, this seems like really weird db normalization.

  kind of seems like <sia_base> goes with [myirbe]pubd_base and both
  really need to be supplied by resource holder via negotiation with a
  publication service.

- a lot of the data for rpkid and pubd operator can be pulled from
  config file, no need for separate configuration.  perhaps in this
  brave new world we lock people using this ui into one big config
  file for everything so we can avoid making them type everything
  three times?  still some icky stuff with [rpkid], [irdbd], etc
  sections linking to each other, not immediately obvious how to fix
  that without losing generality in core daemons, but maybe inspect
  these sections again and there will be some simple approach.

- when answering setup request from child, we need to save xml blob
  they sent us as replacement for a line that's now in children.csv.
  well, but we also need expiration date, how fun.

  # Syntax: <child_handle> <validitydate> <bpki_cert_filename>

  <child_handle> becomes name of xml blob file: children/foo.xml or
  whatever.  it's a private matter except that we have to tell the
  child what we picked so they can use it in up-down protocol.  this
  same name goes into service url we cons up for this child.

  <validitydate> we need to deduce, invent, or look up, somehow.  in
  real production we would have this on file as it's tied to contract
  expiration.  in testing we've just been saying "one year from
  today".

  <bpki_cert_filename> is the child's bpki.resources cert, which they
  just handed us, yay.

- when answering setup request from publication client, we need to
  save xml blob, same as parent saving child.

  # Syntax: <client_handle> <bpki_cert_filename> <sia_base>

  <client_handle> is what we call this client, name of xml blob file
  we save, we get to chose it but we have to tell client what we chose
  so they can use it.  this same name goes into service url we cons up
  for this client.
  
  <bpki_cert_filename> is the client's bpki.resources cert, which they
  just handed us, yay.

  <sia_base> is making my head hurt yet again.  this time it is what
  we will allow this client to use, so it'd better not conflict with
  any other publication client.  oh, wait, i said this was zero
  security at the moment, ok.

- i should write converters from the current parents.csv,
  children.csv, and pubclients.csv into the new format, both to
  simplify migration and also as a clue as to what i've forgotten.

- the above story is weak on publication setup.  among other things,
  the linkage between parent and repository that publishes things that
  come from classes derived from that parent is weak, perhaps because
  that linkage doesn't make any particular sense outside of rpkid's
  object model. the real restriction in rpkid is that all the resource
  classes derived from a single parent object share a repository
  object.

- oh yeah, and, unrelated to any of the above, i should check the
  syntax restrictions on up-down resource class names, and perhaps
  replace the numeric (last vestige of sql-derived identifiers)
  resource class names we're using with resource class names extruded
  from irdb.  which might involve hacking left-right protocol, and
  might create a uniqueness problem when publishing children under
  self, but would be nice to get rid of the sql-derived ids.



To: RPKI Testbed <rpki@rpki.net>
Subject: plan for new rpki setup tools
From: Rob Austein <sra@hactrn.net>
X-Original-To: sra@cyteen.hactrn.net
Delivered-To: sra@cyteen.hactrn.net
Date: Sat, 30 Jan 2010 02:00:02 -0500
Mime-Version: 1.0
Content-Transfer-Encoding: 7bit
Message-Id: <20100130070003.7706715F382@angband.hactrn.net>

per findings of the tokyo rpki workshop, here's an outline of the
current plan for revised setup tools for the rpki code.

step 1: user run a new "initialize" script.  this reads the .conf file
        and creates the resource-holding "self" bpki identity (what
        we've been calling bpki.myrpki/ca.cer, although that name
        should change and the user shouldn't need to know it anymore).
        if the .conf file says that this user will be running any
        servers at all (rpkid, irdbd, pubd, rootd), this script also
        creates what we've been calling bpki.myirbe/ca.cer and issues
        bpki ee certificates for all the servers we will be running.
        it bundles up the "self" identity (bpki.myrpki/ca.cer and the
        "handle" value from the [myrpki] section of the .conf file) as
        an xml blob, which it writes out to some filename (call it
        me.xml for now).

	the general idea here is to start with all the setup that we
	can do based just on the .conf file without talking to anybody
	else.

step 2: user sends me.xml to parent, who saves it in a file
        children/foo.xml (where foo is the parent's name for this
        child).  parent also feeds this file and and parent's own
        me.xml into another new script (call it "setup_child" for now,
        since the parent uses it to set up its child).  this script
        writes out a customized parent record (another xml blob)
        tailored to this particular child (service url including
        parent's and child's names, parent's rpkid server bpki cert,
        etc -- most of the data that goes into a line in parents.csv
        now).  this xml blob can (and usually does) also include
        either an offer of publication service (if the parent runs
        pubd and is willing to act as repository for this child) or a
        hint pointing to some other repository (probably the one the
        parent itself uses).  the distinction between offer and hint
        here is that the parent can only offer a pubd server it runs;
        for anything else it can only hint.  parent sends this xml
        result blob back to child, who stores at in a parents/
        directory with a name corresponding to the current
        parent_handle (ie, the filename is the child's name for the
        parent, eg, arin.xml).

step 3: user sends me.xml to a publication service (probably the one
        offered or hinted by the parent); publication service feeds
        that and its own me.xml into yet another new script (call it
        "setup_client") for now.  this script does essentially the
        same for things for the publication service as the setup_child
        script does for the parent: it generates a customized xml blob
        to be returned to the client, telling the client what service
        url, pubd bpki cert, etc to use when talking to this
        repository.

step 4: user sends all of the stuff collected so far to whatever
        entity is going to host it (run rpkid for it), who then runs a
        "setup_hosting" script; in the common case where this user
        hosts itself, this just means that the user runs setup_hosting
        for itself.  in either case, this fills in the last missing
        bits (service url and bpki cert for children of this user to
        use when talking to its rpkid, etc).   result of this is an
        updated me.xml file.

step 2 repeats for multiple parents.  in theory, step 3 could repeat
for multiple publication services, in practice that's less likely

after performing the above steps, the user should have all the data
necessary to start running the current my{rpki,irbe} scripts.
we'll probably want to integrate all off this a bit better with the
current code (which will need some rewriting in any case).

rootd is a special case, in this as in all else.  when we're running
rootd, the initalize script should probably just create everything
needed for rootd and for rpkid to know about rootd as its parent.
rootd is always operated by the same entity as the rpkid that uses
this rootd as its parent, so this is a bit tedious but should be
straightforward.  similarly, i think it's ok for us to insist that the
operator running rootd must also run its own pubd.

the sequence of events in the numbered steps above matters: we have
nothing to talk about until we create our own identity, and we don't
know which publication service to talk to until we have talked to our
parent.  it may not be necessary to postpone hosting setup until last,
but it's probably harmless and may make it easier to merge all or part
of this last step into the my{rpki,irbe} dialog.

i don't really know yet whether all of the new scripts above are
really new scripts or are calls to a smaller number of scripts with
more arguments.  don't feel strongly about it, most important
criterion is to minimize user confusion.

comments welcome.   i may not get to them for a few weeks, as it's ski
season :)



To: RPKI Testbed <rpki@rpki.net>
Subject: Re: renaming some of the obscure bits of myrpki
From: Rob Austein <sra@hactrn.net>
X-Original-To: sra@cyteen.hactrn.net
Delivered-To: sra@cyteen.hactrn.net
Date: Sun, 04 Oct 2009 16:34:57 -0400
In-Reply-To: <m2eipknqxp.wl%randy@psg.com>
User-Agent: Wanderlust/2.14.0 (Africa) Emacs/21.3 Mule/5.0 (SAKAKI)
Mime-Version: 1.0
Content-Transfer-Encoding: 7bit
Message-Id: <20091004203457.740F822807@thrintun.hactrn.net>

briefly going back to the original topic of this thread (before randy
hijacked it to beat me up about missing documentation :)

At Sun, 04 Oct 2009 05:49:38 +0900, Randy Bush wrote:
> 
> >   bpki.myrpki/	=> bpki.resources/
> >   bpki.myirbe/	=> bpki.daemons/
> 
> make sense
> 
> >   myrpki.py		=> update_resources.py
> 
> update which resources?  mine by fetching from parent?
> 
> >   myirbe.py		=> update_daemons.py
> 
> get new code from svn repository?

how about:

myrpki.py => configure_resources.py
myirbe.py => configure_daemons.py

?

per yesterday's conversation, there are a couple of missing scripts,
perhaps with names like:

do_initial_setup.py
run_servers.py


thrintun.hactrn.net:/u/sra/rpki/subvert-rpki.hactrn.net/myrpki.rototill/PLAN, 26-Feb-2010 16:03:29, sra

Current theory on out-of-band XML-based setup protocol.

Step 1: initialize.py generates lots of stuff (see previous pages),
        writes initial self.xml containing handle and
        bpki/myrpki/ca.cer

Step 2: setup_child.py ... and sends back xml containing:

        parent's bpki/myrpki/ca.cer
	parent's (or parent's host's) bpki/myirbe/ca.cer
	service url, up-down sender/recipient names
	and either:

	    A publication offer, which contains just the service url
	    (because server ca is same as rpkid's?  i think so.  not
	    allowed to offer when we're not running pubd.   well, ok,
	    i suppose we could be running pubd without running rpkid,
	    kind of perverse but if it should be legal we need to pass
	    back the bpki/myirbe/ca.cer in this case); or

	    A publication hint, which would include the
	    bpki/myirbe/ca.cer of the publication server and a signed
	    (cms blob wrapping something) authorization for
	    publication server to grant part of parent's publication
	    space to child (which would also need to identify the
	    child, so would need to include child bpki/myrpki/ca.cer).

	This does kind of sound like we should just always include
	publication server's bpki/myirbe/ca.cer and not worry about
	optimizing that.

	From parent's point of view, an offer could just be a referral
	that the parent knows it's willing to accept, but maybe the
	distinction matters to the child.  Semantics should probably
	follow biz practice rather than implemntation arcana, and in
	biz practice there certainly is a difference between and offer
	and a hint to use a third party, so keep distinction.

Step 3: setup_client.py (icky name) reads, um, self.xml and parent's
        response (from step 2) and spits out, um, just contact URL I
        think, as client appears to have bpki/myirbe/ca.cer already.

Step 4: Have not yet completely worked out whether publication data
        from step 3 becomes part of self.xml object.  Perhaps.