idnits 2.17.1 draft-ietf-xmpp-dna-03.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- == There are 2 instances of lines with non-RFC2606-compliant FQDNs in the document. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (September 6, 2013) is 3884 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Outdated reference: A later version (-14) exists of draft-ietf-dane-srv-02 == Outdated reference: A later version (-03) exists of draft-miller-posh-01 ** Downref: Normative reference to an Informational RFC: RFC 4949 ** Obsolete normative reference: RFC 5785 (Obsoleted by RFC 8615) ** Obsolete normative reference: RFC 6125 (Obsoleted by RFC 9525) -- Possible downref: Non-RFC (?) normative reference: ref. 'XEP-0220' -- Obsolete informational reference (is this intentional?): RFC 3920 (Obsoleted by RFC 6120) Summary: 3 errors (**), 0 flaws (~~), 4 warnings (==), 3 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group P. Saint-Andre 3 Internet-Draft M. Miller 4 Intended status: Standards Track Cisco Systems, Inc. 5 Expires: March 10, 2014 September 6, 2013 7 Domain Name Associations (DNA) in the Extensible Messaging and Presence 8 Protocol (XMPP) 9 draft-ietf-xmpp-dna-03 11 Abstract 13 This document improves the security of the Extensible Messaging and 14 Presence Protocol (XMPP) in two ways. First, it specifies how 15 "prooftypes" can establish a strong association between a domain name 16 and an XML stream. Second, it describes how to securely delegate a 17 source domain to a derived domain, which is especially important in 18 virtual hosting environments. 20 Status of this Memo 22 This Internet-Draft is submitted in full conformance with the 23 provisions of BCP 78 and BCP 79. 25 Internet-Drafts are working documents of the Internet Engineering 26 Task Force (IETF). Note that other groups may also distribute 27 working documents as Internet-Drafts. The list of current Internet- 28 Drafts is at http://datatracker.ietf.org/drafts/current/. 30 Internet-Drafts are draft documents valid for a maximum of six months 31 and may be updated, replaced, or obsoleted by other documents at any 32 time. It is inappropriate to use Internet-Drafts as reference 33 material or to cite them other than as "work in progress." 35 This Internet-Draft will expire on March 10, 2014. 37 Copyright Notice 39 Copyright (c) 2013 IETF Trust and the persons identified as the 40 document authors. All rights reserved. 42 This document is subject to BCP 78 and the IETF Trust's Legal 43 Provisions Relating to IETF Documents 44 (http://trustee.ietf.org/license-info) in effect on the date of 45 publication of this document. Please review these documents 46 carefully, as they describe your rights and restrictions with respect 47 to this document. Code Components extracted from this document must 48 include Simplified BSD License text as described in Section 4.e of 49 the Trust Legal Provisions and are provided without warranty as 50 described in the Simplified BSD License. 52 Table of Contents 54 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 55 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 56 3. Flow Chart . . . . . . . . . . . . . . . . . . . . . . . . . . 3 57 4. A Simple Scenario . . . . . . . . . . . . . . . . . . . . . . 6 58 5. One-Way Authentication . . . . . . . . . . . . . . . . . . . . 7 59 6. Piggybacking . . . . . . . . . . . . . . . . . . . . . . . . . 8 60 6.1. Assertion . . . . . . . . . . . . . . . . . . . . . . . . 8 61 6.2. Supposition . . . . . . . . . . . . . . . . . . . . . . . 9 62 7. Alternative Prooftypes . . . . . . . . . . . . . . . . . . . . 10 63 7.1. DANE . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 64 7.2. POSH . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 65 8. Secure Delegation and Multi-Tenancy . . . . . . . . . . . . . 11 66 9. Prooftype Model . . . . . . . . . . . . . . . . . . . . . . . 12 67 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 68 10.1. Well-Known URI for xmpp-client Service . . . . . . . . . . 12 69 10.2. Well-Known URI for xmpp-server Service . . . . . . . . . . 13 70 11. Security Considerations . . . . . . . . . . . . . . . . . . . 13 71 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 13 72 12.1. Normative References . . . . . . . . . . . . . . . . . . . 13 73 12.2. Informative References . . . . . . . . . . . . . . . . . . 14 74 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 14 76 1. Introduction 78 The need to establish a strong association between a domain name and 79 an XML stream arises in both client-to-server and server-to-server 80 communication using the Extensible Messaging and Presence Protocol 81 (XMPP), because XMPP servers are typically identified by DNS domain 82 names. However, a client or peer server needs to verify the identity 83 of a server to which it connects. To date, such verification has 84 been established based on information obtained from the Domain Name 85 System (DNS), the Public Key Infrastructure (PKI), or similar 86 sources. This document (1) generalizes the model currently in use so 87 that additional prooftypes can be defined, (2) provides a basis for 88 modernizing some prooftypes to reflect progress in underlying 89 technologies such as DNS Security [RFC4033], and (3) describes the 90 flow of operations for establishing a domain name association. 92 Furthermore, the process for resolving the domain name of an XMPP 93 service into the IP address at which an XML stream will be negotiated 94 (defined in [RFC6120]) can involve delegation of a source domain 95 (say, example.com) to a derived domain (say, hosting.example.net). 96 If such delegation is not done in a secure manner, then the domain 97 name association cannot be authenticated. Therefore, this document 98 provides guidelines for defining secure delegation methods. 100 2. Terminology 102 This document inherits XMPP terminology from [RFC6120] and 103 [XEP-0220], DNS terminology from [RFC1034], [RFC1035], [RFC2782] and 104 [RFC4033], and security terminology from [RFC4949] and [RFC5280]. 105 The terms "source domain", "derived domain", "reference identity", 106 and "presented identity" are used as defined in the "CertID" 107 specification [RFC6125]. The terms "permissive federation", 108 "verified federation", and "encrypted federation" are derived from 109 [XEP-0238], although we substitute the term "authenticated 110 federation" for the term "trusted federation" from that document. 112 3. Flow Chart 114 The following flow chart illustrates the protocol flow for 115 establishing domain name associations between Server A and Server B, 116 as described in the remaining sections of this document. 118 | 119 | 120 (Section 4: A Simple Scenario) 121 | 122 | 123 DNS RESOLUTION ETC. 124 | 125 +-------------STREAM HEADERS--------------------+ 126 | | 127 | A: | 128 | | 129 | B: | 130 | | 131 +-----------------------------------------------+ 132 | 133 +-------------TLS NEGOTIATION-------------------+ 134 | | 135 | B: Server Certificate | 136 | [B: Certificate Request] | 137 | [A: Client Certificate] | 138 | | 139 +-----------------------------------------------+ 140 | 141 (A establishes DNA for b.example!) 142 | 143 +-------------AUTHENTICATION--------------------+ 144 | | | 145 | {client certificate?} ----+ | 146 | | | | 147 | | yes no | | 148 | v | | 149 | SASL EXTERNAL | | 150 | (mutual auth!) | | 151 +------------------------------------|----------+ 152 | 153 +----------------+ 154 | B needs to auth A 155 | 156 (Section 5: One-Way Authentication) 157 | 158 | 159 DNS RESOLUTION ETC. 160 | 161 +-------------STREAM HEADERS--------------------+ 162 | | 163 | B: | 164 | | 165 | A: | 166 | | 167 +-----------------------------------------------+ 168 | 169 +-------------TLS NEGOTIATION-------------------+ 170 | | 171 | A: Server Certificate | 172 | | 173 +-----------------------------------------------+ 174 | 175 (B establishes DNA for a.example!) 176 | 177 | 178 (Section 6.1: Piggybacking Assertion) 179 | 180 | 181 +----------DIALBACK IDENTITY ASSERTION----------+ 182 | | 183 | B: | 185 | | 186 +-----------------------------------------------+ 187 | 188 +-----------DNA DANCE AS ABOVE------------------+ 189 | | 190 | DNS RESOLUTION, STREAM HEADERS, | 191 | TLS NEGOTIATION, AUTHENTICATION | 192 | | 193 +-----------------------------------------------+ 194 | 195 +----------DIALBACK IDENTITY VERIFICATION-------+ 196 | | 197 | A: | 200 | | 201 +-----------------------------------------------+ 202 | 203 | 204 (Section 6.2: Piggybacking Supposition) 205 | 206 | 207 +-----------SUBSEQUENT CONNECTION---------------+ 208 | | 209 | B: | 211 | | 212 | A: | 214 | | 215 +-----------------------------------------------+ 216 | 217 +-----------DNA DANCE AS ABOVE------------------+ 218 | | 219 | DNS RESOLUTION, STREAM HEADERS, | 220 | TLS NEGOTIATION, AUTHENTICATION | 221 | | 222 +-----------------------------------------------+ 223 | 224 +-----------DIALBACK OPTIMIZATION---------------+ 225 | | 226 | B: | 228 | | 229 | B: | 232 | | 233 +-----------------------------------------------+ 235 4. A Simple Scenario 237 To illustrate the problem, consider the simplified order of events 238 (see [RFC6120] for details) in establishing an XML stream between 239 Server A (a.example) and Server B (b.example): 241 1. Server A resolves the DNS domain name b.example. 242 2. Server A opens a TCP connection to the resolved IP address. 243 3. Server A sends an initial stream header to Server B, asserting 244 that it is a.example: 246 248 4. Server B sends a response stream header to Server A, asserting 249 that it is b.example: 251 253 5. The servers attempt TLS negotiation, during which Server B 254 (acting as a TLS server) presents a PKIX certificate proving that 255 it is b.example and Server A (acting as a TLS client) presents a 256 PKIX certificate proving that it is a.example. 257 6. Server A checks the PKIX certificate that Server B provided and 258 Server B checks the PKIX certificate that Server A provided; if 259 these proofs are consistent with the XMPP profile of the matching 260 rules from [RFC6125], each server accepts that there is a strong 261 domain name association between its stream to the other party and 262 the DNS domain name of the other party. 264 Several simplifying assumptions underlie the happy scenario just 265 outlined: 267 o Server A presents a PKIX certificate during TLS negotiation, which 268 enables the parties to complete mutual authentication. 269 o There are no additional domains associated with Server A and 270 Server B (say, a subdomain rooms.a.example on Server A or a second 271 domain c.example on Server B). 272 o The server administrators are able to obtain PKIX certificates in 273 the first place. 274 o The server administrators are running their own XMPP servers, 275 rather than using hosting services. 277 Let's consider each of these "wrinkles" in turn. 279 5. One-Way Authentication 281 If Server A does not present its PKIX certificate during TLS 282 negotiation (perhaps because it wishes to verify the identity of 283 Server B before presenting its own credentials), Server B is unable 284 to mutually authenticate Server A. Therefore, Server B needs to 285 negotiate and authenticate a stream to Server A, just as Server A has 286 done: 288 1. Server B resolves the DNS domain name a.example. 289 2. Server B opens a TCP connection to the resolved IP address. 290 3. Server B sends an initial stream header to Server A, asserting 291 that it is b.example: 293 294 4. Server A sends a response stream header to Server B, asserting 295 that it is a.example: 297 298 5. The servers attempt TLS negotiation, during which Server A 299 (acting as a TLS server) presents a PKIX certificate proving that 300 it is a.example. 301 6. Server B checks the PKIX certificate that Server A provided; if 302 it is consistent with the XMPP profile of the matching rules from 303 [RFC6125], Server B accepts that there is a strong domain name 304 association between its stream to Server A and the DNS domain 305 name a.example. 307 Unfortunately, now the servers are using two TCP connections instead 308 of one, which is somewhat wasteful. However, there are ways to tie 309 the authentication achieved on the second TCP connection to the first 310 TCP connection; see [XEP-0288] for further discussion. 312 6. Piggybacking 314 6.1. Assertion 316 Consider the common scenario in which Server B hosts not only 317 b.example but also a second domain c.example. If a user of Server B 318 associated with c.example wishes to communicate with a friend at 319 a.example, Server B needs to send XMPP stanzas from the domain 320 c.example rather than b.example. Although Server B could open an new 321 TCP connection and negotiate new XML streams for the domain pair of 322 c.example and a.example, that too is wasteful. Server B already has 323 a connection to a.example, so how can it assert that it would like to 324 add a new domain pair to the existing connection? 326 The traditional method for doing so is the Server Dialback protocol, 327 first specified in [RFC3920] and since moved to [XEP-0220]. Here, 328 Server B can send a element for the new domain pair over 329 the existing stream. 331 332 some-dialback-key 333 335 This element functions as Server B's assertion that it is (also) 336 c.example, and thus is functionally equivalent to the 'from' address 337 of an initial stream header as previously described. 339 In response to this assertion, Server A needs to obtain some kind of 340 proof that Server B really is also c.example. It can do the same 341 thing that it did before: 343 1. Server A resolves the DNS domain name c.example. 344 2. Server A opens a TCP connection to the resolved IP address (which 345 might be the same IP address as for b.example). 346 3. Server A sends an initial stream header to Server B, asserting 347 that it is a.example: 349 350 4. Server B sends a response stream header to Server A, asserting 351 that it is c.example: 353 354 5. The servers attempt TLS negotiation, during which Server B 355 (acting as a TLS server) presents a PKIX certificate proving that 356 it is c.example. 357 6. Server A checks the PKIX certificate that Server B provided; if 358 it is consistent with the XMPP profile of the matching rules from 359 [RFC6125], Server A accepts that there is a strong domain name 360 association between its stream to Server B and the DNS domain 361 name c.example. 363 Now that Server A accepts the domain name association, it informs 364 Server B of that fact: 366 368 The parties can then terminate the second connection, since it was 369 used only for Server A to associate a stream over the same IP:port 370 combination with the domain name c.example (dialback key links the 371 original stream to the new association). 373 6.2. Supposition 375 Piggybacking can also occur in the other direction. Consider the 376 common scenario in which Server A provides XMPP services not only for 377 a.example but also for a subdomain such as a groupchat service at 378 rooms.a.example (see [XEP-0045]). If a user from c.example at Server 379 B wishes to join a room on the groupchat sevice, Server B needs to 380 send XMPP stanzas from the domain c.example to the domain 381 rooms.a.example rather than a.example. Therefore, Server B needs to 382 negotiate and authenticate a stream to rooms.a.example: 384 1. Server B resolves the DNS domain name rooms.a.example. 385 2. Server B opens a TCP connection to the resolved IP address. 386 3. Server B sends an initial stream header to Server A acting as 387 rooms.a.example, asserting that it is b.example: 389 390 4. Server A sends a response stream header to Server B, asserting 391 that it is rooms.a.example: 393 394 5. The servers attempt TLS negotiation, during which Server A 395 (acting as a TLS server) presents a PKIX certificate proving that 396 it is rooms.a.example. 397 6. Server B checks the PKIX certificate that Server A provided; if 398 it is consistent with the XMPP profile of the matching rules from 399 [RFC6125], Server B accepts that there is a strong domain name 400 association between its stream to Server A and the DNS domain 401 name rooms.a.example. 403 As before, the parties now have two TCP connections open. So that 404 they can close the now-redundant connection, Server B sends a 405 dialback key to Server A over the new connection. 407 408 some-dialback-key 409 411 Server A then informs Server B that it accepts the domain name 412 association: 414 416 Server B can now close the connection over which it tested the domain 417 name association for rooms.a.example. 419 7. Alternative Prooftypes 421 The foregoing protocol flows assumed that domain name associations 422 were proved using the standard PKI prooftype specified in [RFC6120]: 423 that is, the server's proof consists of a PKIX certificate that is 424 checked according to a profile of the matching rules from [RFC6125], 425 the client's verification material is obtained out of band in the 426 form of a trusted root, and secure DNS is not necessary. 428 However, sometimes XMPP server administrators are unable or unwilling 429 to obtain valid PKIX certificates for their servers (e.g., the 430 administrator of im.cs.podunk.example can't receive certification 431 authority verification messages sent to 432 mailto:hostmaster@podunk.example, or hosting.example.net does not 433 want to take on the liability of holding the certificate and private 434 key for example.com). In these circumstances, prooftypes other than 435 PKIX are desirable. Two alternatives have been defined so far: DANE 436 and POSH. 438 7.1. DANE 440 In the DANE prooftype, the server's proof consists of a PKIX 441 certificate that is compared as an exact match or a hash of either 442 the SubjectPublicKeyInfo or the full certificate, and the client's 443 verification material is obtained via secure DNS. 445 The DANE prooftype is based on [I-D.ietf-dane-srv]. For XMPP 446 purposes, the following rules apply: 448 o If there is no SRV resource record, pursue the fallback methods 449 described in [RFC6120]. 450 o Use the 'to' address of the initial stream header to determine the 451 domain name of the TLS client's reference identifier (since use of 452 the TLS Server Name Indication is purely discretionary in XMPP, as 453 mentioned in [RFC6120]). 455 7.2. POSH 457 In the POSH (PKIX Over Secure HTTP) prooftype, the server's proof 458 consists of a PKIX certificate that is checked according to the rules 459 from [RFC6120] and [RFC6125], the client's verification material is 460 obtained by retrieving the PKIK certificate over HTTPS at a well- 461 known URI [RFC5785], and secure DNS is not necessary since the HTTPS 462 retrieval mechanism relies on the chain of trust from the public key 463 infrastructure. 465 POSH is defined in [I-D.miller-posh]. For XMPP purposes, the well- 466 known URIs [RFC5785] to be used are: 468 o "/.well-known/posh._xmpp-client._tcp.json" for client-to-server 469 connections 470 o "/.well-known/posh._xmpp-server._tcp.json" for server-to-server 471 connections 473 8. Secure Delegation and Multi-Tenancy 475 One common method for deploying XMPP services is multi-tenancy or 476 virtual hosting: e.g., the XMPP service for example.com is actually 477 hosted at hosting.example.net. Such an arrangement is relatively 478 convenient in XMPP given the use of DNS SRV records [RFC2782], such 479 as the following pointer from example.com to hosting.example.net: 481 _xmpp-server._tcp.example.com. 0 IN SRV 0 0 5269 hosting.example.net 483 Secure connections with multi-tenancy can work using the PKIX 484 prooftype on a small scale if the provider itself wishes to host 485 several domains (e.g., several related domains such as jabber- 486 de.example and jabber-ch.example). However, in practice the security 487 of multi-tenancy has been found to be unwieldy when the provider 488 hosts large numbers of XMPP services on behalf of multiple customers. 489 Typically there are two main reasons for this state of affairs: the 490 service provider (say, hosting.example.net) wishes to limit its 491 liability and therefore does not wish to hold the certificate and 492 private key for the customer (say, example.com) and the customer 493 wishes to improve the security of the service and therefore does not 494 wish to share its certificate and private key with service provider. 495 As a result, server-to-server communications to example.com go 496 unencrypted or the communications are TLS-encrypted but the 497 certificates are not checked (which is functionally equivalent to a 498 connection using an anonymous key exchange). This is also true of 499 client-to-server communications, forcing end users to override 500 certificate warnings or configure their clients to accept 501 certificates for hosting.example.net instead of example.com. The 502 fundamental problem here is that if DNSSEC is not used then the act 503 of delegation via DNS SRV records is inherently insecure. 505 [I-D.ietf-dane-srv] explains how to use DNSSEC for secure delegation 506 with the DANE prooftype and [I-D.miller-posh] explains how to use 507 HTTPS redirects for secure delegation with the POSH prooftype. 509 9. Prooftype Model 511 In general, a DNA prooftype conforms to the following definition: 513 prooftype: A mechanism for proving an association between a domain 514 name and an XML stream, where the mechanism defines (1) the nature 515 of the server's proof, (2) the matching rules for comparing the 516 client's verification material against the server's proof, (3) how 517 the client obtains its verification material, and (4) whether the 518 mechanism depends on secure DNS. 520 The PKI, DANE, and POSH prooftypes adhere to this model. In 521 addition, other prooftypes are possible (examples might include PGP 522 keys rather than PKIX certificates, or a token mechanism such as 523 Kerberos or OAuth). 525 Some prooftypes depend on (or are enhanced by) secure DNS and 526 therefore also need to describe how secure delegation occurs for that 527 prooftype. 529 10. IANA Considerations 531 The POSH specification [I-D.miller-posh] defines a registry for well- 532 known URIs [RFC5785] of protocols that make use of POSH. This 533 specification registers two such URIs, for which the completed 534 registration templates follow. 536 10.1. Well-Known URI for xmpp-client Service 538 This specification registers the "posh._xmpp-client._tcp.json" well- 539 known URI in the Well-Known URI Registry as defined by [RFC5785]. 541 URI suffix: posh._xmpp-client._tcp.json 543 Change controller: IETF 545 Specification document(s): [[ this document ]] 547 10.2. Well-Known URI for xmpp-server Service 549 This specification registers the "posh._xmpp-server._tcp.json" well- 550 known URI in the Well-Known URI Registry as defined by [RFC5785]. 552 URI suffix: posh._xmpp-server._tcp.json 554 Change controller: IETF 556 Specification document(s): [[ this document ]] 558 11. Security Considerations 560 This document supplements but does not supersede the security 561 considerations of [RFC6120] and [RFC6125]. Relevant security 562 considerations can also be found in [I-D.ietf-dane-srv] and 563 [I-D.miller-posh]. 565 12. References 567 12.1. Normative References 569 [I-D.ietf-dane-srv] 570 Finch, T., "Using DNS-Based Authentication of Named 571 Entities (DANE) TLSA records with SRV and MX records.", 572 draft-ietf-dane-srv-02 (work in progress), February 2013. 574 [I-D.miller-posh] 575 Miller, M. and P. Saint-Andre, "PKIX over Secure HTTP 576 (POSH)", draft-miller-posh-01 (work in progress), 577 September 2013. 579 [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", 580 STD 13, RFC 1034, November 1987. 582 [RFC1035] Mockapetris, P., "Domain names - implementation and 583 specification", STD 13, RFC 1035, November 1987. 585 [RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for 586 specifying the location of services (DNS SRV)", RFC 2782, 587 February 2000. 589 [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. 590 Rose, "DNS Security Introduction and Requirements", 591 RFC 4033, May 2005. 593 [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", 594 RFC 4949, August 2007. 596 [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., 597 Housley, R., and W. Polk, "Internet X.509 Public Key 598 Infrastructure Certificate and Certificate Revocation List 599 (CRL) Profile", RFC 5280, May 2008. 601 [RFC5785] Nottingham, M. and E. Hammer-Lahav, "Defining Well-Known 602 Uniform Resource Identifiers (URIs)", RFC 5785, 603 April 2010. 605 [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence 606 Protocol (XMPP): Core", RFC 6120, March 2011. 608 [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and 609 Verification of Domain-Based Application Service Identity 610 within Internet Public Key Infrastructure Using X.509 611 (PKIX) Certificates in the Context of Transport Layer 612 Security (TLS)", RFC 6125, March 2011. 614 [XEP-0220] 615 Miller, J., Saint-Andre, P., and P. Hancke, "Server 616 Dialback", XSF XEP 0220, August 2013. 618 12.2. Informative References 620 [RFC3920] Saint-Andre, P., Ed., "Extensible Messaging and Presence 621 Protocol (XMPP): Core", RFC 3920, October 2004. 623 [XEP-0045] 624 Saint-Andre, P., "Multi-User Chat", XSF XEP 0045, 625 February 2012. 627 [XEP-0238] 628 Saint-Andre, P., "XMPP Protocol Flows for Inter-Domain 629 Federation", XSF XEP 0238, March 2008. 631 [XEP-0288] 632 Hancke, P. and D. Cridland, "Bidirectional Server-to- 633 Server Connections", XSF XEP 0288, August 2012. 635 Authors' Addresses 637 Peter Saint-Andre 638 Cisco Systems, Inc. 639 1899 Wynkoop Street, Suite 600 640 Denver, CO 80202 641 USA 643 Email: psaintan@cisco.com 645 Matthew Miller 646 Cisco Systems, Inc. 647 1899 Wynkoop Street, Suite 600 648 Denver, CO 80202 649 USA 651 Email: mamille2@cisco.com