Thanks Henry.
Well I had looked there, but it all looked quite complicated - I have never 
cloned a git thingy before and I don't even know if Java is available on the 
host :-)
But emboldened by your encouragement I went for the "The short version".
I was very encouraged, as it seemed to do quite a lot, but seemed to hang after 
getting
play-2-TLS-e6c58f64585b182f937358fa984474b86984d77d.tar.bz2

But, even when I tried to do it by hand (the Longer Version), I eventually got 
the java was killed for excessive resource usage.
By which tim sit had downloaded 427MB of stuff.
I don't think these are the sort of hosting costs I want to have.
So I have a sense this is not the solution I was looking for :-)

Very best
Hugh

By the way, the link in "An initial implementation of Linked Data Basic 
Profile" does a 404.

On 9 Aug 2013, at 18:09, Henry Story <[email protected]>
 wrote:

> 
> On 9 Aug 2013, at 18:55, Hugh Glaser <[email protected]> wrote:
> 
>> Thanks.
>> I've looked at quite a bit of this stuff, but still don't see where the ACL 
>> document gets stored and used.
>> 
>> I am beginning to get the sense that I may have to write some code, other 
>> than the ACL rdf to do this.
>> Surely Apache or something else will do this for me?
>> Can't I "just" put the ACL in a file (as in htpasswd) and point something at 
>> it?
>> I certainly don't want to be writing code to make one photo (or simply a 
>> static web site) available.
>> Or is that the "delegated service" you are talking about?
>> 
>> I've got my fingers crossed here.
> 
> You can follow the instructions on installing 
> https://github.com/stample/rww-play
> (It's under the Apache Licence and patches and contributions are welcome )
> 
> Then you'll be able to do the following:
> 
> An initial implementation of the Linked Data Platform spec is implemented 
> here. The same way as theApache httpd server it servers resource from the 
> file system and maps them to the web. By default we map the test_www 
> directory's content to http://localhost:8443/2013/.
> 
> The test_www directory starts with a few files to get you going
> 
> $ cd 
> test_www
> 
> $ 
>  ls -al 
> total 48
> drwxr-xr-x   4 hjs  admin   340  9 Jul 19:04 .
> drwxr-xr-x  15 hjs  admin  1224  9 Jul 19:04 ..
> -rw-r--r--   1 hjs  staff   229  1 Jul 08:10 .acl.ttl
> -rw-r--r--   1 hjs  admin   109  9 Jul 19:04 .ttl
> lrwxr-xr-x   1 hjs  admin     8 27 Jun 20:29 card -> card.ttl
> -rw-r--r--   1 hjs  admin   167  7 Jul 22:42 card.acl.ttl
> -rw-r--r--   1 hjs  admin   896 27 Jun 21:41 card.ttl
> -rw-r--r--   1 hjs  admin   102 27 Jun 22:32 index.ttl
> drwxr-xr-x   2 hjs  admin   102 27 Jun 22:56 raw
> drwxr-xr-x   3 hjs  admin   204 28 Jun 12:51 
> test
> All files with the same initial name up to the . are considered to work 
> together, (and in the current implementation are taken care of by the same 
> agent).
> 
> Symbolic links are useful in that they:
> 
>       • allow one to write and follow linked data that works on the file 
> system without needing to name files by their extensions. For example a 
> statement such as [] wac:agent <card#me> can work on the file system just as 
> well as on the web.
>       • they guide the web agent to which the default representation should be
>       • currently they also help the web agent decide which are the resources 
> it should serve.
> There are three types of resources in this directory:
> 
>       • The symbolic links such as card distinguish the default resources 
> that can be found by an httpGET on http://localhost:8443/2013/card. Above the 
> card -> card.ttl shows that card has a defaultturtle representation.
>       • Each resource also comes with a Web Access Control List, in this 
> example card.acl.ttl, which set access control restrictions on resources on 
> the file system.
>       • Directories store extra data (in addition to their contents) in the 
> .ttl file. (TODO: not quite working)
>       • Directories also have their access control list which are published 
> in a file named .acl.ttl.
> These conventions are provisional implementation decisions, and improvements 
> are to be expected here . (TODO:
> 
>       • updates to the file system are not reflected yet in the server
>       • allow symbolic links to point to different default formats )
> Let us look at some of these files in more detail
> 
> The acl for card just includes the acl for the directory/collection . (TODO: 
> wac:include has not yet been defined in the Web Access Control Ontology)
> 
> $ 
> cat card.acl.ttl 
> @prefix wac: <
> http://www.w3.org/ns/auth/acl#
> > .
> @prefix foaf: <
> http://xmlns.com/foaf/0.1/
> > .
> 
> <> wac:include <.acl> .
> 
> The acl for the directory allows access to all resources in the 
> subdirectories of test_www when accessed from the web as 
> https://localhost:8443/2013/ only to the user authenticated 
> as<https://localhost:8443/2013/card#me>. (TODO: wac:regex is not defined in 
> it's namespace - requires standardisation.)
> 
> $ 
> cat .acl.ttl 
> @prefix acl: <
> http://www.w3.org/ns/auth/acl#
> > . 
> @prefix foaf: <
> http://xmlns.com/foaf/0.1/
> > . 
> 
> 
> [] acl:accessToClass [ acl:regex "https://localhost:8443/2013/.*"; ]
> ;  
>    acl:mode acl:Read, acl:Write; 
>    acl:agent <card#me> .  
> 
> Since card's acl includes only the above directory acl, <card#me> can read 
> that file. The following curlcommand does not specify the public and private 
> keys to use for authentication and so fails:
> 
> $ curl -i -k https://localhost:8443/2013/card
> 
> curl: 
> (56) SSL read
> : error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate, 
> errno 0
> 
> As curl does not allow WANT TLS connections, but only NEED, a failure to 
> authenticate closes the connection. Most browsers have the more friendly 
> behavior allowing the server to return an HTTP error code and an explanatory 
> body.
> 
> Requesting the same resource with a curl that knows which client certificate 
> to use, the request goes through.
> 
> $ curl -i -k --cert ../eg/test-localhost.pem:test   
> https://localhost:8443/2013/card
> 
> HTTP/1.1 200 OK
> Link: <
> MailScanner has detected a possible fraud attempt from "localhost:8443" 
> claiming to be https://localhost:8443/2013/card.acl>; rel=
> acl
> Content-Type: text/turtle
> Content-Length: 1005
> 
> 
> <
> #me> <http://www.w3.org/ns/auth/cert#key> _:node17vcshtjbx1 ;
> 
>     <
> http://xmlns.com/foaf/0.1/name> "Your 
> Name"^^<http://www.w3.org/2001/XMLSchema#string
> > ;
>     <
> http://xmlns.com/foaf/0.1/knows> <http://bblfish.net/people/henry/card#me
> > .
> 
> _:node17vcshtjbx1 a <
> http://www.w3.org/ns/auth/cert#RSAPublicKey
> > ;
>     <
> http://www.w3.org/ns/auth/cert#exponent> 
> "65537"^^<http://www.w3.org/2001/XMLSchema#integer
> > ;
>     <
> http://www.w3.org/ns/auth/cert#modulus> 
> "C13AB88098CF47FCE6B3463FC7E8762036154FE616B956544D50EE63133CC8748D692A00DAFF5331D2564BB1DD5AEF94636ED09EFFA9E776CA6B4A92022BB060BF18FC709936EF43D345289A7FD91C81801A921376D7BCC1C63BD3335FB385A01EC0B71877FCBD1E4525393CCD5F2922D68840945943A675CCAE245222E3EB99B87B180807002063CB78174C1605EA1ECFECF57264F7F60CD8C270175A1D8DD58DFC7D3C56DB273B0494B034EC185B09977CBB530E7E407206107A73CD4B49E17610559F2A81EA8E3F613C3D3C161C06FE5CB114A8522D20DED77CAAA8C761090022F9CD4AF2C8F21DF7CF05287E379225AEA6A3A6610D02C4A44AA7CEED2CC3"^^<http://www.w3.org/2001/XMLSchema#hexBinary
> > .
> 
> Notice the Link header above. Every resource points to its ACL file in such a 
> header.
> 
> The client certificate in ../eg/test-localhost.pem contains exactly the 
> private key given in the above cert as you can see by comparing the modulus 
> and exponents in both representations. This is what allows the authentication 
> to go through, using the (WebID over TLS protocol)[http://webid.info/spec/].
> 
> $ 
> openssl x509 -in ../eg/test-localhost.pem -inform pem -text
> Certificate:
>     Data:
>         Version: 3 
> (0x2)
> 
>         Serial Number: 13633800264985240815 
> (0xbd34fd1b251264ef)
> 
>     Signature Algorithm: sha1WithRSAEncryption
>         Issuer: 
> O=\xE2\x88\x85, CN=
> WebID
>         Validity
>             Not Before: May  3 19:36:33 2013 GMT
>             Not After : May  3 19:46:33 2014 GMT
>         Subject: 
> O=ReadWriteWeb, CN=test
> @localhost
>         Subject Public Key Info:
>             Public Key Algorithm: rsaEncryption
>                 Public-Key: 
> (2048 bit)
> 
>                 Modulus:
>                     00:c1:3a:b8:80:98:cf:47:fc:e6:b3:46:3f:c7:e8:
>                     76:20:36:15:4f:e6:16:b9:56:54:4d:50:ee:63:13:
>                     3c:c8:74:8d:69:2a:00:da:ff:53:31:d2:56:4b:b1:
>                     dd:5a:ef:94:63:6e:d0:9e:ff:a9:e7:76:ca:6b:4a:
>                     92:02:2b:b0:60:bf:18:fc:70:99:36:ef:43:d3:45:
>                     28:9a:7f:d9:1c:81:80:1a:92:13:76:d7:bc:c1:c6:
>                     3b:d3:33:5f:b3:85:a0:1e:c0:b7:18:77:fc:bd:1e:
>                     45:25:39:3c:cd:5f:29:22:d6:88:40:94:59:43:a6:
>                     75:cc:ae:24:52:22:e3:eb:99:b8:7b:18:08:07:00:
>                     20:63:cb:78:17:4c:16:05:ea:1e:cf:ec:f5:72:64:
>                     f7:f6:0c:d8:c2:70:17:5a:1d:8d:d5:8d:fc:7d:3c:
>                     56:db:27:3b:04:94:b0:34:ec:18:5b:09:97:7c:bb:
>                     53:0e:7e:40:72:06:10:7a:73:cd:4b:49:e1:76:10:
>                     55:9f:2a:81:ea:8e:3f:61:3c:3d:3c:16:1c:06:fe:
>                     5c:b1:14:a8:52:2d:20:de:d7:7c:aa:a8:c7:61:09:
>                     00:22:f9:cd:4a:f2:c8:f2:1d:f7:cf:05:28:7e:37:
>                     92:25:ae:a6:a3:a6:61:0d:02:c4:a4:4a:a7:ce:ed:
>                     2c:c3
>                 Exponent: 65537 
> (0x10001)
> 
>         X509v3 extensions:
>             X509v3 Basic Constraints: 
>                 CA:FALSE
>             X509v3 Key Usage: critical
>                 Digital Signature, Non Repudiation, Key Encipherment, Key 
> Agreement
>             Netscape Cert Type: 
>                 SSL Client, S/MIME
>             X509v3 Subject Alternative Name: critical
>                 URI:https://localhost:8443/2013/card#me
>             X509v3 Subject Key Identifier: 
>                 3C:1B:CF:F2:E5:59:9A:E8:76:BE:83:1D:64:FB:07:4E:08:C6:FC:14
>     Signature Algorithm: sha1WithRSAEncryption
>          07:97:78:f5:11:58:00:50:17:91:14:e8:e3:0d:34:22:74:07:
>          ae:61:39:87:23:7a:6c:5c:14:af:13:a6:c8:54:ac:55:d4:41:
>          25:45:eb:52:90:ff:56:b0:f9:71:be:ec:c8:2c:a1:19:1c:86:
>          42:04:3c:55:7c:96:5c:60:70:0a:d7:ed:5b:53:11:56:7e:14:
>          32:92:b9:22:a7:c6:ce:ff:77:17:4a:ac:da:02:ac:24:0e:0e:
>          35:18:bd:e3:73:00:3b:8a:aa:ec:86:76:66:dd:4b:1b:da:0c:
>          c8:a1:d3:27:26:df:bf:6f:55:11:50:3b:8e:04:12:5a:b9:d4:
>          7d:7e
> 
> We would of course like to make the card world readable so that the 
> certificate can be used to login to other servers too. To do this the user 
> <card#me> can append to the <card.acl.ttl> file an authorization making card 
> world readable, using an obvious subset of SPARQL Update
> 
> $ 
> cat ../eg/card.acl.update 
> PREFIX foaf: <
> http://xmlns.com/foaf/0.1/
> >
> INSERT DATA 
> {
> [] acl:accessTo <https://localhost:8443/2013/card
> > ;
>    acl:mode acl:Read;
>    acl:agentClass foaf:Agent .
> 
> }
> $ curl -X PATCH -k -i --data-binary @../eg/card.acl.update -H "Content-Type: 
> application/sparql-update; utf-8"  --cert ../eg/test-localhost.pem:test  
> MailScanner has detected a possible fraud attempt from "localhost:8443" 
> claiming to be https://localhost:8443/2013/card.acl
> It is now possible to read the card without authentication
> 
> $ curl -i -k https://localhost:8443/2013/card
> 
> HTTP/1.1 200 OK
> Link: <
> MailScanner has detected a possible fraud attempt from "localhost:8443" 
> claiming to be https://localhost:8443/2013/card.acl>; rel=
> acl
> Content-Type: text/turtle
> 
> [...]
> Next we can publish a couch surfing opportunity using HTTP's POST method as 
> explained by the LDP spec
> 
> $ curl -X POST -k -i -H "Content-Type: text/turtle; utf-8"  --cert 
> ../eg/test-localhost.pem:test  -H "Slug: couch" -d @../eg/couch.ttl 
> https://localhost:8443/2013/
> 
> HTTP/1.1 201 Created
> Location: 
> https://localhost:8443/2013/couch
> 
> Content-Length: 0
> 
> The Location: header in the above response tells us that the name of the 
> created resource ishttps://localhost:8443/2013/couch.
> 
> We can now look at the contents of the https://localhost:8443/2013/ 
> collection, where we should see - and do - the new couch resource listed as 
> having been created by ldp.
> 
> $ curl -k -i -X GET --cert ../eg/test-localhost.pem:test 
> https://localhost:8443/2013/
> 
> HTTP/1.1 200 OK
> Link: <
> MailScanner has detected a possible fraud attempt from "localhost:8443" 
> claiming to be https://localhost:8443/2013/.acl>; rel=
> acl
> Content-Type: text/turtle
> Content-Length: 119
> 
> 
> <> <
> http://www.w3.org/ns/ldp#created> <raw/> , <card> , <test
> /> , <couch> ;
>     a <
> http://www.w3.org/ns/ldp#Container
> > .
> 
> We can find out about the ACL for this resource using HEAD (TODO: OPTIONS 
> would be better, but is not implemented yet )
> 
> $ curl -X HEAD -k -i --cert ../eg/test-localhost.pem:test 
> https://localhost:8443/2013/couch
> 
> HTTP/1.1 200 OK
> Link: <
> MailScanner has detected a possible fraud attempt from "localhost:8443" 
> claiming to be https://localhost:8443/2013/couch.acl>; rel=
> acl
> Content-Type: text/turtle
> Content-Length: 0
> 
> ( TODO: The Content-Length should not be 0 for HEAD. Bug in Play2.0 probably )
> 
> So we add the couch acl which gives access to that information in addition to 
> the default owner of the collection, to two groups of people
> 
> $  curl -X PATCH -k -i -H "Content-Type: application/sparql-update; utf-8"  
> --cert ../eg/test-localhost.pem:test --data-binary @../eg/couch.acl.patch 
> MailScanner has detected a possible fraud attempt from "localhost:8443" 
> claiming to be https://localhost:8443/2013/couch.acl
> 
> HTTP/1.1 200 OK
> Content-Type: text/plain; 
> charset=
> utf-8
> Content-Length: 9
> 
> Succeeded
> 
> This makes it available to the test user and the members of the WebID and 
> OuiShare groups. If you have a WebID then try adding yours and test it. You 
> can also request different formats by changing theAccept: header such as with 
> the following request for RDF/XML
> 
> $ curl -k -i -X GET -H "Accept: application/rdf+xml" --cert 
> ../eg/test-localhost.pem:test https://localhost:8443/2013/couch
> or if you prefer rdf/xml over turtle as described by the Content Negotiation 
> section of the HTTP1.1 spec:
> 
> $ curl -k -i -X GET -H "Accept:application/rdf+xml;q=0.9,text/turtle;q=0.7" 
> --cert ../eg/test-localhost.pem:test https://localhost:8443/2013/couch
> It is then possible to also use SPARQL queries on particular resources. 
> (TODO: find a better example)
> 
> $ 
> cat ../eg/couch.sparql 
> PREFIX gr: <
> http://purl.org/goodrelations/v1#
> > 
> SELECT ?D
> WHERE 
> {
> 
>   
> [] a <http://bblfish.net/2013/05/10/couch#Surf
> >;
>      gr:description ?D .
> 
> }
> 
> 
> 
> $ curl -X POST -k -i -H "Content-Type: application/sparql-query; 
> charset=UTF-8" --cert ../eg/test-localhost.pem:test --data-binary 
> @../eg/couch.sparql https://localhost:8443/2013/couch
> 
> HTTP/1.1 200 OK
> Content-Type: application/sparql-results+xml
> Content-Length: 337
> 
> <?xml 
> version='1.0' encoding='UTF-8'
> ?>
> <sparql 
> xmlns='http://www.w3.org/2005/sparql-results#'
> >
>     <head>
>         <variable 
> name='D'
> />
>     </head>
>     <results>
>         <result>
>             <binding 
> name='D'
> >
>                 <literal 
> datatype='http://www.w3.org/2001/XMLSchema#string'
> >Comfortable couch in Artist Stables</literal>
>             </binding>
>         </result>
>     </results>
> </sparql>
> 
> 
> Finally if you no longer want the couch surfing opportunity to be published 
> you can DELETE it. ( It would be better to express that it was sold: 
> DELETEing resources on the Web is usually bad practice: it breaks the links 
> that other people set up to your services )
> 
> curl -k -i -X DELETE -H "Accept: text/turtle" --cert 
> ../eg/test-localhost.pem:test https://localhost:8443/2013/couch
> 
> HTTP/1.1 200 OK
> Content-Length: 0
> 
> And so the resource no longer is listed in the LDPC
> 
> $ curl -k -i -X GET --cert ../eg/test-localhost.pem:test 
> https://localhost:8443/2013/
> 
> HTTP/1.1 200 OK
> Link: <
> MailScanner has detected a possible fraud attempt from "localhost:8443" 
> claiming to be https://localhost:8443/2013/.acl>; rel=
> acl
> Content-Type: text/turtle
> Content-Length: 109
> 
> 
> <> a <
> http://www.w3.org/ns/ldp#Container
> > ;
>     <
> http://www.w3.org/ns/ldp#created> <card> , <raw/> , <test
> /> .
> 
> To create a new container one just creates an LDP Resource that contains the 
> triple<> a ldp:Container.
> 
> $ 
> cat ../eg/newContainer.ttl 
> @prefix ldp: <
> http://www.w3.org/ns/ldp#
> > .
> @prefix foaf: <
> http://xmlns.com/foaf/0.1/
> > .
> 
> <> a ldp:Container;
>    foaf:topic 
> "A container for some type X of resources"
> ;
>    foaf:maker <../card#me> .
> 
> 
> $ curl -X POST -k -i -H "Content-Type: text/turtle; utf-8"  --cert 
> ../eg/test-localhost.pem:test -H "Slug: XDir" -d @../eg/newContainer.ttl 
> https://localhost:8443/2013/
> 
> HTTP/1.1 201 Created
> Location: 
> https://localhost:8443/2013/XDir/
> 
> Content-Length: 0
> 
> Note that directories can only be deleted if all ldp:created resources were 
> previously deleted.
> 
> Creating a WebID Certificate
> 
> After starting your server you can point your browser to 
> http://localhost:9000/srv/certgen or to the service over https and create 
> yourself a certificate. For testing purposes and in order to be able to work 
> without the need for network connectivity use 
> `http://localhost:8443/2013/cert#me'. The WebID Certificate will be signed by 
> the agent with Distinguished Name "CN=WebID,O=∅" and added by your browser to 
> its keychain.
> 
> ( Todo: later we will add functionality to add create a local webid that also 
> published the RDF ) To make the WebID valid you will need to publish the 
> relavant rdf at that document location as explained in the WebID spec
> 

Reply via email to