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
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
|
Independent Submission D. Warden
Request for Comments: 7869 Dell Products LP
Category: Informational I. Iordanov
ISSN: 2070-1721 Undatech
May 2016
The "vnc" URI Scheme
Abstract
Virtual Network Computing (VNC) software provides remote desktop
functionality. This document describes a Uniform Resource Identifier
(URI) scheme enabling the launch of VNC clients from other
applications. The scheme specifies parameters useful in securely
connecting clients with remote hosts.
Status of This Memo
This document is not an Internet Standards Track specification; it is
published for informational purposes.
This is a contribution to the RFC Series, independently of any other
RFC stream. The RFC Editor has chosen to publish this document at
its discretion and makes no statement about its value for
implementation or deployment. Documents approved for publication by
the RFC Editor are not a candidate for any level of Internet
Standard; see Section 2 of RFC 5741.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc7869.
Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document.
Warden & Iordanov Informational [Page 1]
^L
RFC 7869 The "vnc" URI Scheme May 2016
Table of Contents
1. Introduction ....................................................3
1.1. Requirements Language ......................................3
2. The "vnc" URI Scheme ............................................3
2.1. URI Scheme Syntax ..........................................3
2.1.1. URI Parameters ......................................4
2.1.2. Data Types ..........................................9
2.2. Processing URIs ...........................................11
2.2.1. Error Handling .....................................12
2.2.2. Connection Profile Matching ........................12
2.3. Connection Channel Types ..................................12
2.3.1. The "Integrated SSH" Channel Type ..................12
2.3.2. The "Secure Tunnel" Channel Type ...................14
3. Security Considerations ........................................15
3.1. Application Trust .........................................16
3.2. URI Handling ..............................................16
3.3. Host Identification .......................................17
3.4. Connection Database Integrity .............................18
4. IANA Considerations ............................................18
4.1. "vnc" Scheme ..............................................18
4.2. Remote Framebuffer Security Types .........................18
4.3. VNC URI Group .............................................19
4.4. VNC URI Connection Channel Types ..........................19
4.5. VNC URI ID Hash Algorithms ................................19
4.6. VNC URI Parameters ........................................21
5. References .....................................................22
5.1. Normative References ......................................22
5.2. Informative References ....................................23
Appendix A. "vnc" URI Template ....................................24
Acknowledgments ...................................................25
Authors' Addresses ................................................25
Warden & Iordanov Informational [Page 2]
^L
RFC 7869 The "vnc" URI Scheme May 2016
1. Introduction
Virtual Network Computing (VNC) clients are used to support remote
desktop connectivity based on the Remote Framebuffer (RFB) Protocol
[RFC6143]. It is often desirable to integrate such functionality
with other software. However, the lack of a standard method for
specifying VNC client parameters has limited such integration.
The "vnc" Uniform Resource Identifier (URI) scheme specified in this
document facilitates the launch of VNC clients from applications in
browser-based, desktop, and mobile environments. Using this scheme,
users and application vendors will be able to integrate remote
desktop capabilities without being tied to a particular client.
Remote desktop clients often store connection profiles in a local
connection database. By associating connections specified in a URI
with those stored in a database, client-specific options can be
automatically applied to a connection launched from another
application, even when that application is unaware of those options.
Connections to VNC servers are often secured using mechanisms
including Transport Layer Security / Secure Sockets Layer (TLS/SSL)
tunneling [RFC5246] and Secure Shell (SSH) [RFC4251] tunneling, which
are outside the scope of the RFB protocol. Defining the behavior of
these client-integrated security options enables their use with "vnc"
URIs.
1.1. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119].
In this document, these words will appear with that interpretation
only when in ALL CAPS. Lowercase uses of these words are not to be
interpreted as carrying the significance described in RFC 2119.
2. The "vnc" URI Scheme
2.1. URI Scheme Syntax
The normative syntax of the "vnc" URI is defined in the <vnc-uri>
rule in the following syntax specification. This specification uses
the Augmented Backus-Naur Form (ABNF) as described in [RFC5234]. The
"vnc" URI conforms to the generic URI syntax specified in [RFC3986].
The <userinfo>, <host>, <port>, <unreserved>, and <pct-encoded> rules
are defined in [RFC3986].
Warden & Iordanov Informational [Page 3]
^L
RFC 7869 The "vnc" URI Scheme May 2016
vnc-uri = "vnc://" [ userinfo "@" ] [ host [ ":" port ] ]
[ "?" [ vnc-params ] ]
vnc-params = param "=" value *("&" param "=" value) ["&"]
param = 1*( param-char )
value = *( param-char )
param-char = unreserved / pct-encoded / unreserved-symbols
unreserved-symbols = ":" / "/" / "@" / "!" / "$" / "'"
/ "(" / ")" / "*" / "," / ";"
The "?", "=", and "&" characters are used to delimit VNC parameters
and must be percent-encoded when representing a data octet as
specified in [RFC3986]. Within the <vnc-params> portion of a "vnc"
URI, the <unreserved-symbols> do not have special meaning and need
not be percent-encoded when representing a data octet.
A "vnc" URI has the general form:
vnc://host:port?param1=value1¶m2=value2...
The host information and each parameter value specify information
used in establishing or operating the remote desktop session as
specified in Section 2.1.1.
For example:
vnc://10.0.0.1:5901?VncPassword=secret&SecurityType=2
This example indicates a VNC connection to the host at IP "10.0.0.1"
on port "5901" with VNC password "secret" using the VNC
Authentication security type.
2.1.1. URI Parameters
A description of host information and URI parameters is provided in
this section. Information on the constraints of various data types
is provided in Section 2.1.2. All parameters are considered
optional; however, a client will not be able to connect without
sufficient information.
A parameter without a specified default value indicates that no
default value is implied by this URI scheme; however, VNC clients can
apply implementation-dependent default behaviors otherwise consistent
with this document.
Warden & Iordanov Informational [Page 4]
^L
RFC 7869 The "vnc" URI Scheme May 2016
The <userinfo> value is deprecated and processed only in an
implementation-specific manner. The <userinfo> component MUST NOT be
generated in an environment where a client supporting an updated URI
format is expected to be available. When processing a URI value from
an untrusted source, VNC clients SHOULD alert the user in order to
mitigate the risk that the URI is constructed to obscure the identity
of the remote host unless the URI can be validated or backwards-
compatibility considerations make an alert impractical.
The <host> and <port> values in the "vnc" URI specify the address of
the VNC server on the remote host:
+------------+------------+-----------------------------+----------+
| Name | Type | Description | Default |
+------------+------------+-----------------------------+----------+
| host | string | VNC server hostname or IP | none |
+------------+------------+-----------------------------+----------+
| port | ushort | VNC server port | 5900 |
+------------+------------+-----------------------------+----------+
Warden & Iordanov Informational [Page 5]
^L
RFC 7869 The "vnc" URI Scheme May 2016
The "vnc" URI parameter values specify remote desktop connection or
session properties, including aspects of client operation, usability,
and security as specified in the table below:
+---------------+---------+-----------------------------+----------+
| Name | Type | Description | Default |
+---------------+---------+-----------------------------+----------+
|ConnectionName | string | Name of connection profile | none |
+---------------+---------+-----------------------------+----------+
|VncUsername | string | VNC server username | none |
+---------------+---------+-----------------------------+----------+
|VncPassword | string | VNC server password | none |
+---------------+---------+-----------------------------+----------+
|SecurityType | enum | RFB security type used | none |
| | <rfbsec>| | |
+---------------+---------+-----------------------------+----------+
|ChannelType | enum | Connection channel type | none |
| | <chan> | | |
+---------------+---------+-----------------------------+----------+
|SshHost | string | SSH server hostname or IP | <host> |
+---------------+---------+-----------------------------+----------+
|SshPort | ushort | SSH server port | 22 |
+---------------+---------+-----------------------------+----------+
|SshUsername | string | SSH username | none |
+---------------+---------+-----------------------------+----------+
|SshPassword | string | SSH password | none |
+---------------+---------+-----------------------------+----------+
|IdHashAlgorithm| enum | Hash algorithm used with | none |
| | <idhash>| "IdHash" parameter | |
+---------------+---------+-----------------------------+----------+
|IdHash | string | Expected hash of remote | none |
| | <hex> | public key or certificate | |
+---------------+---------+-----------------------------+----------+
|ColorLevel | enum | Client color depth/mode | none |
| | <clevel>| | |
+---------------+---------+-----------------------------+----------+
|ViewOnly | boolean | Client is view only | false |
+---------------+---------+-----------------------------+----------+
|SaveConnection | boolean | Store connection info | none |
+---------------+---------+-----------------------------+----------+
o ConnectionName, SaveConnection
"ConnectionName" is used to identify a connection profile in both
the launching application and VNC client. Profiles are applied as
described in Section 2.2.2. If omitted, the client MAY generate a
name based on the host, port, and/or other parameters. The VNC
client MAY normalize the name as required.
Warden & Iordanov Informational [Page 6]
^L
RFC 7869 The "vnc" URI Scheme May 2016
If true, "SaveConnection" indicates a connection profile should be
created or updated and stored in the client connection database.
If false, no profile should be updated or persisted.
o VncUsername, VncPassword, SecurityType
The "SecurityType" parameter indicates which RFB security type
applies to the connection. RFB security types are recorded in the
IANA "Remote Framebuffer Security Types" registry created by
[RFC6143]. The VNC client will use this information to determine
which parameters are required and establish the connection.
VNC clients can sometimes automatically negotiate a security type
with a server. Specifying the security type controls the security
negotiation. Specifying the security type also allows a client to
prompt for necessary security parameters prior to establishing a
connection. Parameters may take time to enter on mobile clients
and could otherwise result in timeouts and/or security lockouts.
If the specified type is not supported by the server, an error
SHOULD be indicated as described in Section 2.2.1.
"VncUsername" and "VncPassword" are used when applicable to
authenticate to the VNC server using the specified "SecurityType".
Since passwords often contain arbitrary characters, they will
often require percent encoding.
o ChannelType
"ChannelType" specifies the transport stream used to carry
connection data. This allows a client to initiate a connection
using a secure transport protocol such as SSH prior to connecting
to the VNC server socket. Use of this value in the context of the
"Integrated SSH" and "Secure Tunnel" channel types is provided in
Section 2.3.
o SshHost, SshPort, SshUsername, SshPassword
The SSH parameters are intended for use with the "Integrated SSH"
channel type described in Section 2.3.1. These parameters can
also be used with any future SSH-based channel types. Since
passwords often contain arbitrary characters, they will often
require percent encoding.
Warden & Iordanov Informational [Page 7]
^L
RFC 7869 The "vnc" URI Scheme May 2016
o IdHashAlgorithm, IdHash
The "IdHashAlgorithm" and "IdHash" values are used to verify the
expected identity of the remote system based on its public key or
certificate. Use of these values in the context of the
"Integrated SSH" and "Secure Tunnel" channel types is provided in
Section 2.3.
o ColorLevel
The "ColorLevel" parameter specifies the color model to use for
data transfer and display as specified in Section 2.1.2. If the
requested color model is unsupported, the behavior is
implementation dependent.
o ViewOnly
If "ViewOnly" is true, the VNC client SHOULD operate in a display-
only mode and refrain from sending input data including KeyEvent,
PointerEvent, and ClientCutText messages specified in Section 7.5
of [RFC6143] unless this mode is unsupported by the client.
Parameter names SHOULD be provided in the case specified in this
document; however, for compatibility, clients SHOULD accept
parameters in a case-insensitive manner. Values SHALL be interpreted
in a case-sensitive manner, unless otherwise noted.
Additional parameters likely to be useful with multiple VNC clients
can be added to the "VNC URI Parameters" registry as specified in
Section 4.6 of this document. Individual clients MAY support
parameters specific to that client. VNC clients supporting
application-specific parameters SHOULD include a distinguishing
prefix within the parameter name, such as the name of the application
package specified in source code except when precluded by
compatibility constraints. For example:
vnc://?com.dell.vncclient.ScreenMode=2&
It can also be expected that clients will maintain backward
compatibility with legacy URI formats and parameters.
Legacy software applications respond to "vnc" URIs in different ways
and may fail to behave as expected. It is advisable to test "vnc"
URIs with specific applications or consult application-specific
documentation.
Warden & Iordanov Informational [Page 8]
^L
RFC 7869 The "vnc" URI Scheme May 2016
2.1.2. Data Types
"vnc" URIs can be percent-encoded as specified in [RFC3986] and MUST
be decoded. After decoding, the following type constraints and
semantics apply:
o string
Values of "string" type are UTF-encoded strings as specified in
[RFC3629].
The "string<hex>" subtype used in the "IdHash" consists of colon-
delimited ":" octets displayed in hexadecimal. For example:
5D:D2:39:57
Comparison of "string<hex>" values SHALL be case insensitive;
however, the uppercase notation is preferred for readability.
o enum
The "enum" types consist of specific enumerated subtypes and are
represented by their decimal value.
The "enum<rfbsec>" values represent an RFB security type included
in the IANA "Remote Framebuffer Security Types" registry created
by [RFC6143].
"enum<chan>" values represent connection channel types listed in
the "VNC URI Connection Channel Types" registry created by
Section 4.4 of this document. Initial values are:
Value Description
-------- --------------
1 Standard TCP
23 Secure Tunnel
24 Integrated SSH
The "Standard TCP" channel type represents a generic TCP
connection. The "Secure Tunnel" and "Integrated SSH" [RFC4252]
channel types are described in Section 2.3.
Warden & Iordanov Informational [Page 9]
^L
RFC 7869 The "vnc" URI Scheme May 2016
Values of the "enum<idhash>" parameter represent secure hash
algorithms in the "VNC URI Hash Algorithms" registry created by
Section 4.5 of this document. The initial values include:
Value Description
-------- ------------
1 MD5
2 SHA1
4 SHA256
The MD5 algorithm is described in [RFC1321]. The SHA-1 and
SHA-256 algorithms are described in [SHS].
Values of the "enum<clevel>" subtype represent a color level. In
the table below, the columns have the meaning specified in
Section 7.4 of [RFC6143]:
BPP = bits-per-pixel
TC = true-color-flag
RM = red-max
GM = green-max
BM = blue-max
RS = red-shift
GS = green-shift
BS = blue-shift
The values are:
Value Description BPP Depth TC RM GM BM RS GS BS
----- --------------- --- ----- -- ---- ---- ---- -- -- --
1 Black and White 8 3 t 1 1 1 2 1 0
2 Grayscale 8 6 t 3 3 3 4 2 0
3 8 Colors 8 3 t 1 1 1 2 1 0
4 64 Colors 8 6 t 3 3 3 4 2 0
5 256 Colors 8 8 t 7 7 3 0 3 6
6 16-bit Color 16 16 t 31 63 31 11 5 0
7 24-bit Color 32 24 t 255 255 255 16 8 0
8 30-bit Color 32 30 t 1023 1023 1023 0 10 20
A value of "t" indicates the true-color-flag should be set. The
big-endian-flag (see Section 7.4 of [RFC6143]) should be set as
required for the system.
o ushort
The "ushort" values represent unsigned 16-bit integers expressed
in decimal digits with value between 0-65535 inclusive.
Warden & Iordanov Informational [Page 10]
^L
RFC 7869 The "vnc" URI Scheme May 2016
o boolean
"boolean" values represent conditions that are true or false and
are represented as either "true" or "false" respectively. For
maximum compatibility, clients SHOULD accept the value 1 as
representing true values and 0 as representing false values.
Clients SHOULD perform parsing of "boolean" values in a case-
insensitive manner.
An example "vnc" URI including several of these data types is:
vnc://localhost:5900?ConnectionName=Server&SecurityType=2&
IdHash=0D:3A:72:08:57:EA:4D:30&SaveConnection=false&
Note the above example should be considered to be a contiguous
string without line breaks or whitespace and is broken into
multiple lines in this document for readability.
2.2. Processing URIs
Conceptually, a "vnc" URI supports only a "VIEW" operation,
indicating the user wishes to view the remote desktop accessible via
the URI reference.
In general, when a VNC client receives a "vnc" URI, it will initiate
a remote desktop connection with the RFB protocol using the specified
host information and parameter values. Initiating the connection
using a connection channel mechanism such as those specified in
Section 2.3 might require processing prior to establishing the RFB
connection. A client MAY attempt to automatically discover or
negotiate appropriate connection channel, security, or other
parameter values.
The process for negotiating security types is specified in [RFC6143].
Supported connection channels could be discovered by testing channel
types to detect when a channel is successfully established. To best
integrate with other applications, the VNC client SHOULD initiate the
connection with minimal or no user intervention, whenever sufficient
information is available and adequate security is preserved.
Host information and parameter values may be provided through
connection profiles. When a parameter value is not available from
either a URI or a connection profile described in Section 2.2.2, the
default value specified in Section 2.1.1 SHOULD be applied. If
available parameters are not sufficient to establish a connection,
the VNC client SHOULD present a session initiation data-entry screen.
Warden & Iordanov Informational [Page 11]
^L
RFC 7869 The "vnc" URI Scheme May 2016
2.2.1. Error Handling
In a typical interactive environment, if an error prevents a session
from being established, the VNC client presents an error message to
the user. When the message is acknowledged, the console application
can show a session initiation data-entry screen populated with
available session parameters, or it can terminate. If an error
occurs after a session is successfully established that terminates
the connection, the VNC client presents a termination notification to
the user. When the termination notification is acknowledged, the
client can present a reconnection prompt or terminate.
When an error occurs in a dedicated environment (such as a kiosk
system), the system can transmit an alert to the remote operator,
record a log entry, and execute appropriate fallback behavior such as
automatically attempting to reestablish a session or displaying a
generic message requesting servicing.
2.2.2. Connection Profile Matching
VNC clients MAY store remote desktop session settings in connection
profiles. If the client is able to uniquely identify and associate a
connection request with a connection profile based on the
"ConnectionName" parameter value, remote host IP address, or hostname
/ fully qualified domain name, the VNC client SHOULD apply profile
values for those settings that do not have values supplied in the
"vnc" URI. When profile data is unavailable, the VNC client MAY
apply global application defaults for settings not supplied in the
URI and for which the scheme does not specify a default value. The
VNC client MUST NOT override supplied parameters with profile values
or global defaults.
When the "SaveConnection" parameter value is true, within the VNC
client, a connection profile SHOULD be created or updated with the
values supplied in the "vnc" URI. Profile updates and storage should
be consistent with the recommendations in Section 3.4.
2.3. Connection Channel Types
2.3.1. The "Integrated SSH" Channel Type
The "Integrated SSH" channel type establishes an SSH connection to a
host, authenticates with SSH password authentication, establishes a
secure tunnel to the VNC host/port, and then connects to the VNC
server using a supported "SecurityType". The secure tunnel will
provide encryption and data integrity, while verifying the public key
authenticates the server. The SSH architecture is specified in
[RFC4251]. The steps are detailed below:
Warden & Iordanov Informational [Page 12]
^L
RFC 7869 The "vnc" URI Scheme May 2016
1. The VNC client initiates a transport-level connection to the
"SshHost" on the "SshPort" specified in the parameter values with
a key exchange as described in [RFC4253].
2. When the VNC client receives the server key (or certificate), the
hash of the key (or certificate) is computed using the algorithm
corresponding to the "IdHashAlgorithm" parameter value and
compared with the expected "IdHash" value (if available). If the
certificate hash cannot be verified, the client alerts the user or
operator. In a typical interactive environment, the alert
provides the remote system's identifying information including the
hash value and allows the user to terminate the connection. The
alert could allow the user to accept the key and continue
establishing the connection. In a dedicated environment (such as
a kiosk system), the system can transmit an alert to the remote
operator, record a log entry, and execute appropriate fallback
behavior such as displaying a generic message requesting
servicing.
3. The SSH client authenticates the user using the "SshUsername" and
"SshPassword" parameter values according to the "password"
authentication mechanism described in [RFC4252].
4. The SSH client opens a TCP/IP channel as specified in [RFC4254]
from the local system to the system indicated by the <host> and
<port> information values.
5. The VNC client establishes an RFB connection to the VNC server
over the channel and authenticates using the "SecurityType" as
described in [RFC6143] or other reference.
The VNC client MAY establish the connection described in this section
using an external SSH client, by launching the client and then
connecting to a secure tunnel created between a local port and the
VNC server.
If the VNC client is supplied with additional parameters outside the
scope of this document, it MAY perform a variation of these steps
consistent with the underlying protocols, for example, by using
"publickey" SSH client authentication [RFC4252] or providing another
form of authentication to the VNC server. The specific negotiation
of SSH parameters such as cipher suite configuration is outside the
scope of this document.
Many SSH clients present key hashes using MD5, and it can be expected
that launching applications will specify the hash be displayed in the
manner its users are familiar with.
Warden & Iordanov Informational [Page 13]
^L
RFC 7869 The "vnc" URI Scheme May 2016
For compatibility, when the "SecurityType" parameter value is
"Integrated SSH" (24), a VNC client MUST treat the value as a request
to use "Integrated SSH" as the "ChannelType". However, this value
SHOULD NOT be supplied for the "SecurityType" parameter unless
required for backward compatibility as the channel is established
prior to connecting to the server and is not consistent with the
negotiation of other security types.
2.3.2. The "Secure Tunnel" Channel Type
The "Secure Tunnel" channel type establishes a TLS connection with a
remote server using certificate authentication, over which a
connection to the VNC server is established using a supported
"SecurityType". The secure tunnel will provide encryption and data
integrity, while verifying the certificate authenticates the server.
The TLS protocol is specified in [RFC5246]. The steps are detailed
below:
1. The VNC client initiates the TLS Handshake Protocol with a system
indicated by the <host> and <port> information values.
2. When the server certificate is received, the hash of the key
certificate is computed using the algorithm corresponding to the
"IdHashAlgorithm" parameter value and compared with the expected
"IdHash" value (if available). If the certificate hash cannot be
verified, the client alerts the user or operator. In a typical
interactive environment, the alert provides the remote system's
identifying information and allows the user to terminate the
connection. The alert could allow the user to accept the key and
continue establishing the connection. In a dedicated environment
(such as a kiosk system), the system can transmit an alert to the
remote operator, record a log entry, and execute appropriate
fallback behavior such as displaying a generic message requesting
servicing.
When providing identifying information of a host identified by an
X.509 certificate [RFC5280] [X.509], the certificate subject,
issuer, validity period, and certificate hash is typically
included. The VNC client MAY verify the validity of the
certificate. If the validity of a certificate is not confirmed,
the alert includes a statement indicating such information has not
been verified.
3. The client finishes establishing the TLS tunnel.
4. The VNC client establishes an RFB connection to the VNC server
over the channel and authenticates using the "SecurityType" as
described in [RFC6143] or other reference.
Warden & Iordanov Informational [Page 14]
^L
RFC 7869 The "vnc" URI Scheme May 2016
If the VNC client is supplied with additional parameters, it MAY
perform a variation of these steps consistent with the underlying
protocols, for example, by providing another form of authentication
to the VNC server. The negotiation of specific TLS parameters such
as cipher suite configuration is outside the scope of this document.
The TLS protocol provides backwards compatibility with SSLv3;
however, due to known security flaws, it SHOULD NOT be used.
For compatibility, when the "SecurityType" parameter value is "Secure
Tunnel" (23), a VNC client MUST treat the value as a request to use
"Secure Tunnel" as the "ChannelType". However, this value SHOULD NOT
be supplied for the "SecurityType" parameter unless required for
backward compatibility as the channel must be established prior to
connecting to the server and is not consistent with the negotiation
of other security types.
3. Security Considerations
General security concerns involving URI schemes are discussed in
[RFC3986]. In implementing support for the "vnc" URI scheme, areas
for particular consideration include application trust, URI handling,
host identification, and connection database security.
Remote desktop connectivity requires the transmission of security
credentials, which could be included in a URI. If those credentials
are not kept secure, an attacker can gain access to any systems using
those credentials. Host addresses and connection parameters might
also be considered sensitive, as such information can be used in
planning an attack.
URIs can also contain host identification information. It is
important to securely identify the remote host system to which a
connection is established. If a user connects to an attacker's
system, user data, including credentials, can be exposed.
Note that the RFB protocol itself may not encrypt data. To protect
data in transit, RFB should be tunneled over TLS [RFC5246], SSH
[RFC4251], or another secure protocol.
Some VNC systems can be used without authentication. To protect the
remote host, strong passwords or other authentication mechanisms need
to be used.
Warden & Iordanov Informational [Page 15]
^L
RFC 7869 The "vnc" URI Scheme May 2016
3.1. Application Trust
A malicious application receiving VNC credentials via URI or other
means can obviously misuse those credentials. To protect against
this, users should only install applications from trusted sources.
The integrity of application packages can be verified through digital
signatures.
Applications launching VNC clients can elect to launch only
particular trusted clients and can specify those clients through
platform-specific mechanisms. Package integrity can be verified
programmatically by querying the package manager for digital
signatures or other platform-specific means.
The risk to a VNC client from a launching application is generally
much lower, since the launching application will not receive
credentials or data from the client. A VNC client can verify its
caller thorough platform-specific means.
VNC clients ought not to accept potentially destructive parameters
from untrusted launching applications without explicit user
confirmation. For example, a client-specific parameter that runs an
arbitrary command upon establishing an SSH connection used for VNC
tunneling is potentially destructive and high risk.
3.2. URI Handling
Within a mobile or desktop environment, application launch will
typically involve in-memory URI data transmission facilitated and
secured by the operating system.
When "vnc" URIs are exchanged or used within a system, their contents
might be exposed by process listings or other instrumentation. Users
need to avoid including sensitive information in "vnc" URIs that
could be exposed to unauthorized observation.
If sensitive URI information is exchanged across a network, for
example, by providing a list of connection URIs in a web page, the
data needs to be encrypted in transit and only be accessible to
authorized users.
When an application detects potentially sensitive information in a
"vnc" URI, it needs to be handled securely or discarded. In
particular, URI data on persistent storage needs to be encrypted as
described in Section 3.4.
Warden & Iordanov Informational [Page 16]
^L
RFC 7869 The "vnc" URI Scheme May 2016
Since "vnc" URIs may contain sensitive information, applications
should avoid logging the URIs even when errors occur. Users need to
avoid including sensitive information in "vnc" URIs that are used
with applications where logging is unavoidable.
Applications that process URIs in a generic way, such as web
browsers, might not detect that sensitive information is contained in
a URI and could cache or store that information insecurely. It is
advisable to avoid including credentials and other sensitive
information in URIs that are likely to be processed in a generic way
unless such caching and storage is disabled or otherwise secured.
3.3. Host Identification
In the absence of verifiable host identification, a VNC client
application is vulnerable to spoofing and man-in-the-middle attacks
that capture VNC or host OS credentials and user data. To prevent
such attacks, administrators SHOULD secure their VNC communications
with TLS [RFC5246] or SSH [RFC4251] tunnels or other connection
mechanisms identifying remote hosts via certificate or public key.
VNC clients MUST verify the respective certificates or public keys to
confirm the remote host's identity.
An application launching a VNC client via URI MAY provide a
certificate hash or public key hash identifying the remote host. VNC
clients maintaining a connection database can also store certificate
or public key data suitable for validating a host's identity.
If connecting to a system identified by certificate or public key and
a remote system ID hash cannot be matched to available identifying
data, the VNC client needs to alert the user or operator. In a
typical interactive environment, the alert will provide the remote
system's identifying information and allow the user to terminate the
connection. The alert can allow the user to accept the information
and continue establishing the connection. In a dedicated environment
(such as a kiosk system), the system can transmit an alert to the
remote operator, record a log entry, and execute appropriate fallback
behavior such as displaying a generic message requesting servicing.
When providing identifying information of a host identified by an
X.509 certificate [RFC5280] [X.509], the certificate subject, issuer,
validity period, and certificate hash need to be included. The VNC
client can verify the certificate validity. If the validity of a
certificate is not determined, the alert needs to include a statement
indicating such information has not been verified.
Warden & Iordanov Informational [Page 17]
^L
RFC 7869 The "vnc" URI Scheme May 2016
Identifying information of a host identified by public key, such as
the endpoint of an SSH connection using a raw key, needs to include a
hash of the key.
3.4. Connection Database Integrity
A VNC client application and/or launching application can maintain a
connection database containing remote host information, credentials,
and/or connection parameters. Applications storing credentials need
to ensure they are stored in an encrypted format with a decryption
process requiring user-supplied or device-specific data. If
supported, it is advisable for applications to have a setting
disabling storage of credentials.
If available, the VNC client connection database can store
certificate or public key data used to verify host identification.
To prevent a malicious URI from overriding the database, if
identification information in the URI conflicts with information in
the database, the user or operator needs to be alerted. In a typical
interactive environment, the user can be prompted to accept the new
information prior to updating the database.
4. IANA Considerations
The "vnc" scheme has been registered in the "Uniform Resource
Identifier (URI) Schemes" registry.
The "Remote Framebuffer Security Types", "VNC URI Connection Channel
Types", "VNC URI ID Hash Algorithms", and "VNC URI Parameters"
registries support elements of the scheme.
4.1. "vnc" Scheme
IANA has added the "vnc" scheme to the "Uniform Resource Identifier
(URI) Schemes" registry with description "Remote Framebuffer
Protocol" and reference to this document. A registration template is
provided in Appendix A.
The IANA schemes registry is currently located at
<http://www.iana.org/assignments/uri-schemes>.
4.2. Remote Framebuffer Security Types
This document references the existing IANA "Remote Framebuffer
Security Types" registry in specifying security type options. RFB
security types are supported in "vnc" URIs.
Warden & Iordanov Informational [Page 18]
^L
RFC 7869 The "vnc" URI Scheme May 2016
Security mechanisms integrated with VNC clients might need to alter
the process by which a connection is established prior to the
security handshake described in Section 7.1.2 of [RFC6143]. Such
mechanisms should be reflected in the "VNC URI Connection Channel
Types" registry described in Section 4.4 of this document rather than
the "Remote Framebuffer Security Types" registry, as their use cannot
be negotiated by the mechanism specified in [RFC6143].
Exceptions can be made for backwards compatibility. IANA has updated
the "Secure Tunnel" and "Integrated SSH" security types to refer to
this document.
4.3. VNC URI Group
IANA has created a "Virtual Network Computing (VNC) Uniform Resource
Identifier (URI)" group. This group contains application-level, URI-
related registries distinct from those used by the RFB protocol
itself.
4.4. VNC URI Connection Channel Types
IANA has created a "VNC URI Connection Channel Types" registry within
the "Virtual Network Computing (VNC) Uniform Resource Identifier
(URI)" group. The registry includes Value, Description, and
Reference columns. The initial contents of the registry are
described in this document. The values of the "Secure Tunnel" and
"Integrated SSH" types are copied from the RFB Security Types
registry. They are:
Value Description Reference
-------- --------------- --------------
0 Reserved this document
1 Standard TCP this document
23 Secure Tunnel this document
24 Integrated SSH this document
The maximum acceptable value is 2,147,483,647.
Future assignments to this registry should be made through the "First
Come First Served" process described in [RFC5226].
4.5. VNC URI ID Hash Algorithms
IANA has created a "VNC URI ID Hash Algorithms" registry within the
"Virtual Network Computing (VNC) Uniform Resource Identifier (URI)"
group. The registry includes Value, Description, and Reference
columns.
Warden & Iordanov Informational [Page 19]
^L
RFC 7869 The "vnc" URI Scheme May 2016
The initial hash algorithms specified are a subset of the algorithms
contained in the "TLS HashAlgorithm Registry". The initial contents
of the registry are:
Value Description Reference
-------- ------------ --------------
0 Reserved this document
1 MD5 this document
2 SHA1 this document
4 SHA256 this document
The maximum acceptable value is 2,147,483,647.
Future assignments to this registry should be made through the "First
Come First Served" process described in [RFC5226].
Warden & Iordanov Informational [Page 20]
^L
RFC 7869 The "vnc" URI Scheme May 2016
4.6. VNC URI Parameters
IANA has created a "VNC URI Parameters" registry within the "VNC URI"
group.
The initial contents are described in this document. They are:
+-----------------+-----------------------------+-----------------+
| Name | Description | Reference |
+-----------------+-----------------------------+-----------------+
| ConnectionName | Name of connection profile | this document |
+-----------------+-----------------------------+-----------------+
| VncUsername | VNC server username | this document |
+-----------------+-----------------------------+-----------------+
| VncPassword | VNC server password | this document |
+-----------------+-----------------------------+-----------------+
| SecurityType | RFB security type used | this document |
+-----------------+-----------------------------+-----------------+
| ChannelType | Connection channel type | this document |
+-----------------+-----------------------------+-----------------+
| SshHost | SSH server hostname or IP | this document |
+-----------------+-----------------------------+-----------------+
| SshPort | SSH server port | this document |
+-----------------+-----------------------------+-----------------+
| SshUsername | SSH username | this document |
+-----------------+-----------------------------+-----------------+
| SshPassword | SSH password | this document |
+-----------------+-----------------------------+-----------------+
| IdHashAlgorithm | Hash algorithm used with | this document |
| | "IdHash" parameter | |
+-----------------+-----------------------------+-----------------+
| IdHash | Expected hash of remote | this document |
| | public key or certificate | |
+-----------------+-----------------------------+-----------------+
| ColorLevel | Client color depth/mode | this document |
+-----------------+-----------------------------+-----------------+
| ViewOnly | Client is view only | this document |
+-----------------+-----------------------------+-----------------+
| SaveConnection | Store connection info | this document |
+-----------------+-----------------------------+-----------------+
Future assignments to this registry should be made through the "First
Come First Served" process described in [RFC5226].
Warden & Iordanov Informational [Page 21]
^L
RFC 7869 The "vnc" URI Scheme May 2016
5. References
5.1. Normative References
[RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321,
DOI 10.17487/RFC1321, April 1992,
<http://www.rfc-editor.org/info/rfc1321>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
STD 63, RFC 3629, DOI 10.17487/RFC3629, November 2003,
<http://www.rfc-editor.org/info/rfc3629>.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, RFC
3986, DOI 10.17487/RFC3986, January 2005,
<http://www.rfc-editor.org/info/rfc3986>.
[RFC4251] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
Protocol Architecture", RFC 4251, DOI 10.17487/RFC4251,
January 2006, <http://www.rfc-editor.org/info/rfc4251>.
[RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252,
January 2006, <http://www.rfc-editor.org/info/rfc4252>.
[RFC4253] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
Transport Layer Protocol", RFC 4253, DOI 10.17487/RFC4253,
January 2006, <http://www.rfc-editor.org/info/rfc4253>.
[RFC4254] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
Connection Protocol", RFC 4254, DOI 10.17487/RFC4254,
January 2006, <http://www.rfc-editor.org/info/rfc4254>.
[RFC5234] Crocker, D., Ed., and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, RFC 5234,
DOI 10.17487/RFC5234, January 2008,
<http://www.rfc-editor.org/info/rfc5234>.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246,
DOI 10.17487/RFC5246, August 2008,
<http://www.rfc-editor.org/info/rfc5246>.
Warden & Iordanov Informational [Page 22]
^L
RFC 7869 The "vnc" URI Scheme May 2016
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
Housley, R., and W. Polk, "Internet X.509 Public Key
Infrastructure Certificate and Certificate Revocation List
(CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008,
<http://www.rfc-editor.org/info/rfc5280>.
[RFC6143] Richardson, T. and J. Levine, "The Remote Framebuffer
Protocol", RFC 6143, DOI 10.17487/RFC6143, March 2011,
<http://www.rfc-editor.org/info/rfc6143>.
[SHS] National Institute of Standards and Technology, "Secure
Hash Standard", NIST FIPS PUB 180-4,
DOI 10.6028/NIST.FIPS.180-4, August 2015.
5.2. Informative References
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
DOI 10.17487/RFC5226, May 2008,
<http://www.rfc-editor.org/info/rfc5226>.
[RFC7595] Thaler, D., Ed., Hansen, T., and T. Hardie, "Guidelines and
Registration Procedures for URI Schemes", BCP 35, RFC 7595,
DOI 10.17487/RFC7595, June 2015,
<http://www.rfc-editor.org/info/rfc7595>.
[X.509] ITU-T, "Information technology - Open Systems
Interconnection - The Directory: Public-key and attribute
certificate frameworks", ITU-T Recommendation X.509,
ISO/IEC 9594-8, 2005.
Warden & Iordanov Informational [Page 23]
^L
RFC 7869 The "vnc" URI Scheme May 2016
Appendix A. "vnc" URI Template
This template is provided for registration of the "vnc" URI in the
IANA "Uniform Resource Identifier (URI) Schemes" registry as
specified in [RFC7595].
Scheme name: vnc
Status: Permanent
Applications/protocols that use this scheme name: Virtual Network
Computing (VNC) remote desktop applications use vnc URIs. VNC
applications use the Remote Framebuffer (RFB) protocol.
Contact: IESG <iesg@ietf.org>.
Change Controller: See the authors of this document. Change control
is through the IESG on behalf of the IETF <iesg@ietf.org>.
References: This document.
Warden & Iordanov Informational [Page 24]
^L
RFC 7869 The "vnc" URI Scheme May 2016
Acknowledgments
Dominic Parkes and the staff of RealVNC Ltd. graciously reviewed this
document and provided constructive comments.
RFB and VNC are registered trademarks of RealVNC Ltd. in the United
States and in other countries.
Authors' Addresses
David Warden
Dell Products LP
200 Dell Way
Round Rock, TX 78682
United States
Phone: 512-728-0380
Email: David_Warden@dell.com
URI: http://www.dell.com
Iordan Iordanov
Undatech
260 Scarlet Road, Apt. 503
Toronto, ON M6N 4X6
Canada
Email: iiordanov@gmail.com
Warden & Iordanov Informational [Page 25]
^L
|