-
Notifications
You must be signed in to change notification settings - Fork 0
/
webid.go
288 lines (245 loc) · 63.1 KB
/
webid.go
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
package solidproxy
import (
"bytes"
"crypto/rand"
"crypto/rsa"
"crypto/sha1"
"crypto/tls"
"crypto/x509"
"crypto/x509/pkix"
"encoding/asn1"
"encoding/base64"
"encoding/pem"
"errors"
"fmt"
"log"
"math/big"
"net/http"
"strings"
"time"
)
// Agent is a structure which contains all the information necessary for WebID-TLS auth.
type Agent struct {
WebID string
Profile string
Cert *tls.Certificate
Key *rsa.PrivateKey
Log *log.Logger
}
// RSAAuthentication structure
type RSAAuthentication struct {
Source, Nonce, Username string
}
// RSAAuthorization structure
type RSAAuthorization struct {
Source, Username, Nonce, Signature string
}
var (
err error
subjectAltName = []int{2, 5, 29, 17}
notBefore = time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
notAfter = time.Date(2049, 12, 31, 23, 59, 59, 0, time.UTC)
rsaBits = 2048
)
// NewAgent creates a new agent object using an existing WebID (URI)
func NewAgent(uri string) (*Agent, error) {
agent := &Agent{
Log: InitLogger(false),
}
if len(uri) == 0 {
return agent, errors.New("You must provide an URI for the agent's WebID")
}
agent.WebID = uri
return agent, nil
}
// NewAgentLocal creates a new agent object together with a full profile and certificate
func NewAgentLocal(uri string, bits ...int) (*Agent, error) {
agent, err := NewAgent(uri)
if err != nil {
return agent, err
}
keyLen := rsaBits
if len(bits) > 0 {
keyLen = bits[0]
}
// Create a new keypair
privKey, E, N, err := NewRSAKey(keyLen)
if err != nil {
return agent, err
}
agent.Key = privKey
agent.Profile = NewAgentProfile(E, N)
agent.Cert, err = NewRSAcert(uri, "Solid Agent Cooper", privKey)
return agent, err
}
// NewRSAKey creates a new RSA key pair
func NewRSAKey(bits int) (*rsa.PrivateKey, string, string, error) {
var e, n string
p, err := rsa.GenerateKey(rand.Reader, bits)
if err != nil {
return p, e, n, err
}
e = fmt.Sprintf("%d", p.PublicKey.E)
n = fmt.Sprintf("%x", p.PublicKey.N)
return p, e, n, err
}
// Handler function handles requests for the agent's WebID profile document
func (agent *Agent) Handler(w http.ResponseWriter, req *http.Request) {
agent.Log.Printf("New request for agent WebID from: %+v\n", req.RemoteAddr)
w.Header().Set("Content-Type", "text/turtle")
w.WriteHeader(200)
w.Write([]byte(agent.Profile))
}
// NewAgentProfile returns a new WebID profile document for the agent
func NewAgentProfile(exp string, mod string) string {
return `@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
<>
a <http://xmlns.com/foaf/0.1/PersonalProfileDocument> ;
<http://xmlns.com/foaf/0.1/primaryTopic> <#me> .
<#me>
a <http://xmlns.com/foaf/0.1/Agent> ;
<http://xmlns.com/foaf/0.1/title> "Special agent" ;
<http://xmlns.com/foaf/0.1/name> "Dale Cooper" ;
<http://xmlns.com/foaf/0.1/nick> "Coop" ;
<http://xmlns.com/foaf/0.1/img> <data:image/jpeg;base64,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> ;
<http://www.w3.org/ns/auth/cert#key> <#key> .
<#key>
a <http://www.w3.org/ns/auth/cert#RSAPublicKey> ;
<http://www.w3.org/ns/auth/cert#exponent> "` + exp + `"^^<http://www.w3.org/2001/XMLSchema#int> ;
<http://www.w3.org/ns/auth/cert#modulus> "` + mod + `"^^<http://www.w3.org/2001/XMLSchema#hexBinary> .
`
}
// NewRSAcert creates a new RSA x509 self-signed certificate to use for
// WebID-TLS authentication
func NewRSAcert(uri string, name string, priv *rsa.PrivateKey) (*tls.Certificate, error) {
// Create the certificate
uri = "URI: " + uri
template := x509.Certificate{
SerialNumber: new(big.Int).SetInt64(42),
Subject: pkix.Name{
CommonName: name,
Organization: []string{"WebID"},
// Country: []string{"US"},
},
NotBefore: notBefore,
NotAfter: notAfter,
BasicConstraintsValid: true,
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth},
}
rawValues := []asn1.RawValue{
{Class: 2, Tag: 6, Bytes: []byte(uri)},
}
values, err := asn1.Marshal(rawValues)
if err != nil {
return nil, err
}
template.ExtraExtensions = []pkix.Extension{{Id: subjectAltName, Value: values}}
keyPEM := bytes.NewBuffer(nil)
err = pem.Encode(keyPEM, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)})
if err != nil {
return nil, err
}
derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &priv.PublicKey, priv)
if err != nil {
return nil, err
}
certPEM := bytes.NewBuffer(nil)
err = pem.Encode(certPEM, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
if err != nil {
return nil, err
}
cert, err := tls.X509KeyPair(certPEM.Bytes(), keyPEM.Bytes())
if err != nil {
return nil, err
}
return &cert, nil
}
func extractSANValue(cert *x509.Certificate) (string, error) {
for _, x := range cert.Extensions {
if x.Id.Equal(subjectAltName) {
v := asn1.RawValue{}
_, err = asn1.Unmarshal(x.Value, &v)
if err != nil {
return "", err
}
sanURI := string(v.Bytes[2:])
if strings.HasPrefix(sanURI, "URI:") {
sanURI = strings.TrimSpace(sanURI[4:])
}
return sanURI, nil
}
}
return "", nil
}
// WebIDFromBytes takes a certificate and extracts the subjectAlternativeName value from it.
func WebIDFromBytes(cert []byte) (string, error) {
parsed, err := x509.ParseCertificate(cert)
if err != nil {
return "", err
}
return extractSANValue(parsed)
}
// WebIDFromCert returns a WebID value (URI) from a given tls.Certificate
func WebIDFromCert(cert *tls.Certificate) (string, error) {
parsed, err := x509.ParseCertificate(cert.Certificate[0])
if err != nil {
return "", err
}
return extractSANValue(parsed)
}
// WebIDFromReq takes an http.Request object and extracts the WebID value (URI) from it
func WebIDFromReq(req *http.Request) (string, error) {
t := req.TLS
if t == nil || !t.HandshakeComplete {
return "", errors.New("Not a TLS connection or TLS handshake failed")
}
if len(t.PeerCertificates) < 1 {
return "", errors.New("No client certificate found in the TLS request!")
}
return extractSANValue(t.PeerCertificates[0])
}
// ParseRSAAuthenticateHeader parses an Authenticate header and returns an RSAAuthentication object
func ParseRSAAuthenticateHeader(header string) (*RSAAuthentication, error) {
auth := &RSAAuthentication{}
if len(header) == 0 {
return auth, errors.New("Cannot parse WWW-Authenticate header: no header present")
}
opts := make(map[string]string)
parts := strings.SplitN(header, " ", 2)
if parts[0] != "WebID-RSA" {
return auth, errors.New("Not a WebID-RSA authentication header. Got " + parts[0])
}
parts = strings.Split(parts[1], ",")
for _, part := range parts {
vals := strings.SplitN(strings.TrimSpace(part), "=", 2)
key := vals[0]
val := strings.Replace(vals[1], "\"", "", -1)
opts[key] = val
}
auth = &RSAAuthentication{
Source: opts["source"],
Nonce: opts["nonce"],
}
return auth, nil
}
// NewRSAAuthorizationHeader returns a new Authorization header for WebID-RSA auth
func (agent *Agent) NewRSAAuthorizationHeader(auth *RSAAuthentication) (string, error) {
claim := sha1.Sum([]byte(auth.Source + auth.Username + auth.Nonce))
pKey := x509.MarshalPKCS1PrivateKey(agent.Key)
keyBytes := pem.EncodeToMemory(&pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: pKey,
})
signer, err := ParseRSAPrivatePEMKey(keyBytes)
if err != nil {
return "", err
}
signed, err := signer.Sign(claim[:])
if err != nil {
return "", err
}
b64Sig := base64.StdEncoding.EncodeToString(signed)
header := `WebID-RSA source="` + auth.Source + `", username="` + auth.Username + `", nonce="` + auth.Nonce + `", sig="` + b64Sig + `"`
return header, nil
}