security.txt
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:104k
源码类别:

通讯/手机编程

开发平台:

Windows_Unix

  1. SECURITY FEATURES FOR AUTHENTICATION AND ENCRYPTION OF TCP/IP CONNECTIONS
  2. IN C-KERMIT 7.0 AND KERMIT 95 1.1.19
  3. 30 January 2000
  4. CONTENTS
  5.     1. INTRODUCTION
  6.     2. DISCLAIMERS
  7.     3. AVAILABILITY
  8.     3.1  Authentication and Encryption in Kermit 95
  9.     3.1.1  Kerberos in Kermit 95
  10.     3.1.2  Secure Remote Password (SRP) in Kermit 95
  11.     3.1.3  NTLM in Kermit 95
  12.     3.1.4  OpenSSL support for SSLv3 and TLSv1 in Kermit 95
  13.     3.2  Authentication and Encryption in C-Kermit
  14.     3.2.1  Kerberos in C-Kermit
  15.     3.2.2  Secure Remote Password (SRP) in C-Kermit
  16.     3.2.3  OpenSSL support for SSLv3 and TLSv1 in C-Kermit
  17.     3.2.4  Shadow Passwords in C-Kermit
  18.     3.2.5  Pluggable Authentication Modules (PAM) in C-Kermit
  19.     4. GLOSSARY
  20.     5. AUTHENTICATION PROTOCOL OVERVIEWS
  21.     5.1 KERBEROS
  22.     5.2 SECURE REMOTE PASSWORD (SRP)
  23.     5.3 NT LAN MANAGER (NTLM)
  24.     5.4 SSLv3 and TLSv1
  25.     6. AUTHENTICATION AND ENCRYPTION COMMANDS
  26.     6.1. TELNET-Related Commands
  27.     6.2. The SET AUTHENTICATION Command
  28.     6.2.1. Kerberos settings
  29.     6.2.2. SRP settings
  30.     6.2.3. SSL and TLS settings
  31.     6.3. The AUTHENTICATE Command
  32.     7. EFFECTS OF ENCRYPTION ON FILE TRANSFER PERFORMANCE
  33.     8. MULTI-HOMED HOSTS AND NETWORK ADDRESS TRANSLATORS
  34.     9. OTHER NOTES
  35.    10. VARIABLES
  36.    10.1 GENERAL AUTHENTICATION VARIABLES
  37.    10.2 KERBEROS VARIABLES
  38.    10.3 SSL/TLS VARIABLES
  39.    11. FUNCTIONS
  40.    12. SCRIPTING HINTS
  41.    12.1. Kerberos Autoget
  42.    12.2. Autodestruction of Kerberos credentials
  43.    12.3. Automated Prompting for Usernames
  44.    12.4. Password Inclusion in Script Files
  45.    12.5  Using Kermit Scripts to Produce Secure Telnet Services
  46.    13. USING OTHER SECURITY METHODS WITH KERMIT
  47.    13.1  Implementing other security methods for Kermit 95
  48.    14. AN INTRODUCTION TO CERTIFICATES AND CERTIFICATE AUTHORITIES WITH OPENSSL
  49.    14.1  What Are Certificates, Private Keys, CSRs, CAs, and CRLs?
  50.    14.2  RSA Certificates v. DSA Certificates
  51.    14.3  Should You Be Your own Certificate Authority?
  52.    14.4  Generating a DSA CA (self-signed) certificate
  53.    14.5  Generating a DSA CSR
  54.    14.6  Generating a RSA CA (self-signed) certificate
  55.    14.7  Generating a RSA CSR
  56.    14.8  Signing a CSR with your CA certificate
  57.    14.9  Revoking a Certificate
  58.    14.10 Generating a CRL
  59. 1. INTRODUCTION
  60.   This document describes Kerberos(TM), Secure Remote Password (SRP)(TM)
  61.   protocol, Secure Sockets Layer (SSL)/Transport Layer Security (TLS), and
  62.   other security implementations in, or to be used with, current or
  63.   forthcoming releases of Kermit software.  All information presented here
  64.   is preliminary and subject to review, change, or withdrawal prior to final
  65.   release.  NOTE: The terms "Windows 95" and "Windows 9x" in this document
  66.   refer to both Windows 95 and Windows 98; the term "Windows NT" refers to
  67.   Windows NT 3.51 and later and to Windows 2000.
  68. Security is a hot topic on the Internet, and security methods abound.  Secure
  69. connection methods are supported indirectly by the methods described in
  70. "Supplement to 'Using C-Kermit', Second Edition", file ckermit2.txt, Section
  71. 2.7.4.  This document describes authentication methods that can be built into
  72. Kermit 95 and C-Kermit.  Presently these are: Kerberos, Secure Remote Password
  73. (SRP), Secure Sockets Layer(SSL)/Transport Layer Security(TLS), and Microsoft
  74. NT LAN Manager (NTLM).
  75. A secure connection is one that provides:
  76.  . Authentication of the user to the host/service without the transmission
  77.    of the user's password;
  78.  . Authentication of the host to the user; and:
  79.  . A shared secret that can be used with an encryption algorithm to ensure
  80.    the data transmitted over the connection is understood by only the
  81.    client and host.
  82. C-Kermit and Kermit 95 are capable of creating and accepting secure
  83. connections via a variety of methods:
  84.  . Incoming and outgoing secure connections may be established using Telnet
  85.    protocol coupled with Kerberos(TM), Secure Remote Password (SRP)(TM),
  86.    Secure Sockets Layer (SSL)/Transport Layer Security (TLS), and Microsoft
  87.    NTLM.
  88.  . Outgoing secure connections may be established using Rlogin protocol
  89.    coupled with Kerberos (TM).
  90.  . Incoming and outgoing secure connections may be established using
  91.    Secure Sockets Layer (SSL)/Transport Layer Security (TLS) alone.
  92. 1.1. Kerberos
  93. Kerberos(TM) is a method, developed at Massachusetts Institute of Technology,
  94. by which two parties communicating over a TCP/IP connection can authenticate
  95. each other through a trusted third party without sending passwords or
  96. encryption keys in clear text over the network.  Kerberos protocols are
  97. defined in Internet RFCs 1510, 1964, and others.  You can read more about
  98. Kerberos at:
  99.   http://web.mit.edu/kerberos/www/
  100.   http://nii.isi.edu/info/kerberos/
  101.   http://nii.isi.edu/publications/kerberos-neuman-tso.html
  102. There are, in fact, two Kerberos protocols: Kerberos IV (4) and Kerberos V
  103. (5), the latter being the more flexible and secure protocol.  The two are
  104. totally separate and incompatible.  Any given site might support neither,
  105. either one, or both.
  106. When both the client and server support the same version of Kerberos (4 or 5),
  107. then Kerberos authentication with or without encryption can be negotiated.
  108. A "Kerberized" version of Kermit can make a connection to a non-Kerberized
  109. host, and a non-Kerberized host can accept a connection from a Kerberized
  110. version of Kermit, as long as neither side is configured to require Kerberos
  111. authentication.
  112. 1.2. SRP
  113. Secure Remote Password (SRP)(TM) protocol is a method, developed at Stanford
  114. University, by which two parties communicating over a TCP/IP connection can
  115. authenticate each other in a secure manner through a Zero Knowledge
  116. Identification system.  SRP protocols have not yet been accepted as RFCs.
  117. You can read more about SRP at:
  118.   http://srp.stanford.edu/srp/
  119. Once authentication has been achieved with either Kerberos or SRP, a shared
  120. secret is available which can be used to establish an encrypted session.
  121. 1.3. NTLM
  122. NT Lan Manager (NTLM) authentication is only implemented in Kermit 95.
  123. Its only use is to authenticate Kermit 95 to Microsoft's NT Services for
  124. Unix Telnetd.  NTLM does not negotiate a shared secret and therefore
  125. cannot be used to establish encrypted sessions.  Therefore, connections
  126. made with NTLM should not be considered secure.
  127. 1.4. Encryption
  128. Export of encryption software or algorithms is regulated by United States law
  129. (see Section 2).  United States and Canadian residents may contact the Kermit
  130. Project for encryption modules that can be used to provide secure
  131. communications using one of the following encryption algorithms via the Telnet
  132. Encryption Option:
  133.    cast128_cfb64   cast5_40_cfb64   des_cfb64   des3_cfb64
  134.    cast128_ofb64   cast5_40_ofb64   des_ofb64   des3_ofb64
  135. Netscape's Secure Sockets Layer (SSL) and its IETF-approved successor,
  136. Transport Layer Security (TLS), provide for authentication and encryption of
  137. TCP/IP communications using a combination of public key and symmetric
  138. cryptographic algorithms.  Authentication of the server (and optionally the
  139. client) is performed by exchanging ITU-T X.509 certificate chains (see Section
  140. 14 below), which are then verified by the receiver.  Unlike raw public keys,
  141. X.509 certificates may be revoked by issuing a certificate revocation list
  142. (CRL) which is to be checked by the receiver during verification of the
  143. certificate chain.
  144. The encryption provided by SSL/TLS is more secure than the encryption
  145. negotiatied by the Telnet Encryption Option.  This additional security is
  146. provided by a combination of the use of longer encryption keys; the
  147. availability of stronger symmetric cryptographic algorithms; and the signing
  148. of each transmitted block with a message digest algorithm.
  149. TLS may be used in conjunction wth Telnet Authentication methods such as
  150. Kerberos, Secure Remote Password, and NTLM to provide the highest level of
  151. data privacy with the strongest forms of mutual authentication.
  152. The Kermit modules used to implement SSL/TLS are available only to residents
  153. of the United States and Canada due to the restrictions on the export of
  154. software that provides "crypto with a hole" functionality.
  155. 2. DISCLAIMERS
  156. Current US law forbids export of strong encryption software from the USA to
  157. all countries except Canada.  Thus security modules are not included with
  158. Kermit; they must be obtained separately from the sources listed below, in
  159. compliance with the terms and conditions given at those sites and with United
  160. States and international law.  For an overview of this issue, see (for
  161. example):
  162.   http://www.mozilla.org/crypto-faq.html
  163. Kermit software, when combined with the security modules listed in this
  164. document, has been verified to negotiate and conduct authenticated and
  165. encrypted sessions with Kerberos and/or SRP services on Internet hosts at
  166. Columbia University and other test sites, with Kermit features such as
  167. interactive terminal access, file transfer, and scripting operating
  168. successfully over Kerberized connections, with any exceptions noted below.
  169. The Kermit Project does not and can not claim or warrant the external
  170. Kerberos, SRP, OpenSSL or other third-party modules to be free of loopholes
  171. or bugs.  Authentication via Kerberos and/or SRP is not unbreakable.  Any
  172. encryption method can be broken.  Any software that is used for
  173. authentication or encryption should be analyzed for weaknesses, backdoors,
  174. bugs, and loopholes by the site and/or end user before use.
  175. The Kermit Project and Columbia University make no claim or warranty as to any
  176. particular level of security achievable by Kermit software in conjunction with
  177. either Kerberos or Secure Remote Password protocol, and may on no account be
  178. held liable for any damage resulting from its use (a more complete statement
  179. to this effect is found in the C-Kermit 7.0 license).
  180. Functional limitations:
  181.  . Kerberos authentication is available only on Telnet and Rlogin connections.
  182.  . Secure Remote Password authentication is available only on Telnet
  183.    connections.
  184.  . NTLM authentication is available only on Windows 95/98 and NT and only
  185.    on Telnet connections.
  186.  . SSL/TLS may be used as its own connection protocol or on Telnet
  187.    connections.
  188.  . Kerberos support is not available in Kermit 95 for OS/2 due to lack
  189.    of Kerberos implementations for OS/2.
  190. 3. AVAILABILITY
  191. 3.1 Authentication and Encryption in Kermit 95
  192. Kermit 95 comes precompiled with support for Kerberos 4, Kerberos 5, Secure
  193. Remote Password, NT Lan Manager authentication, and OpenSSL's SSLv3 and TLSv1.
  194. 3.1.1. Kerberos in Kermit 95
  195. Beginning with version 1.1.16, Kermit 95 supports Kerberos Telnet
  196. Authentication when any of the following Kerberos IV or Kerberos V
  197. implementations are installed on a Windows 95 or Windows NT workstation:
  198.   Kerberos version 4:
  199.     . MIT Leash distribution:
  200.         http://web.mit.edu/is/help/mink/
  201.   For version 5:
  202.     . MIT distribution:
  203.         http://web.mit.edu/kerberos/www/
  204.     . Cygnus Solutions' KerbNet 1.2:
  205.         http://www.cygnus.com/techie/kerbnet/
  206. Both Kerberos IV and Kerberos V may be installed on the same PC, and the same
  207. copy of Kermit 95 can use either Kerberos version to make Telnet connections.
  208. As of Kermit 95 1.1.18 Kerberized Rlogin connections are supported if the
  209. Kerberos DLLs export necessary functionality.
  210. When Kerberos IV and/or Kerberos V are installed and the DLLs are located in
  211. the PATH, Kermit 95 attempts to negotiate authentication with the host's
  212. Telnet server if the host is Kerberized and if you have not instructed
  213. Kermit 95 to the contrary.
  214. In addition, if the appropriate encryption patch (obtained from the Kermit
  215. Project) is installed, two-way encryption is also negotiated and used if
  216. authentication was negotiated.  The encryption patch is available WITH EXPORT
  217. RESTRICTIONS at:
  218.   http://www.kermit-project.org/noexport.html
  219. Due to the length of the shared secret negotiated by Kerberos only 56-bit DES
  220. encryption can be used.
  221. Per-PC configuration files may or may not be necessary at your installation.
  222. If your site's DNS servers supply Kerberos realm information, no
  223. configuration files are needed and you can skip ahead to Section 3.1.2.
  224. 3.1.1.1 Notes on the Kerberos IV configuration files:
  225. MIT's Leash uses three configuration files which are placed into the WINDOWS
  226. directory: LEASH.INI (user settings), KRB.CON and KRBREALM.CON.  KRB.CON and
  227. KRBREALM.CON are used by Kerberos IV to map your host's domain name to a
  228. realm and then to determine the name of the Kerberos server for that realm.
  229. As distributed from MIT, these files are set up for MIT's realm, domain,
  230. and host information, so if you are not at MIT you'll need to substitute the
  231. information for your own site; for example:
  232. KRB.CON:
  233.   CC.COLUMBIA.EDU
  234.   CC.COLUMBIA.EDU kerberos.cc.columbia.edu
  235.   KERMIT.COLUMBIA.EDU kerberos.cc.columbia.edu
  236.   COLUMBIA.EDU kerberos.cc.columbia.edu
  237.   .KERBEROS.OPTION. dns
  238. The first line is the default Kerberos IV realm to be used.  The subsequent
  239. lines list realms and the hostnames to be used to contact the KDC for that
  240. realm.
  241. KRBREALM.CON:
  242.   .CC.COLUMBIA.EDU CC.COLUMBIA.EDU
  243.   CC.COLUMBIA.EDU CC.COLUMBIA.EDU
  244.   .COLUMBIA.EDU CC.COLUMBIA.EDU
  245.   COLUMBIA.EDU CC.COLUMBIA.EDU
  246.   .KERMIT.COLUMBIA.EDU CC.COLUMBIA.EDU
  247.   KERMIT.COLUMBIA.EDU CC.COLUMBIA.EDU
  248. Each line specifies either a domain name prefaced with a '.' or a host name
  249. and the Kerberos IV realm to which it belongs.
  250. The Leash Kerberos IV implementation does not contain support for server
  251. side functionality.  Therefore, K95 cannot authenticate incoming connections
  252. with Kerberos IV.  It also does not include support for pre-authenticated
  253. ticket granting ticket requests.
  254. 3.1.1.2. Notes on the Kerberos V configuration file
  255. Kerberos V uses a single configuration file, KRB5.CONF (or KRB5.INI on
  256. Windows).  This file must be customized for the domains, realms, and hosts
  257. used in your network environment.  For example:
  258. [libdefaults]
  259.         default_realm = CC.COLUMBIA.EDU
  260.         default_tkt_enctypes = des-cbc-crc
  261.         default_tgs_enctypes = des-cbc-crc
  262.         ticket_lifetime = 600
  263.         dns_fallback = true
  264. [domain_realm]
  265.         .cc.columbia.edu = CC.COLUMBIA.EDU
  266.         cc.columbia.edu = CC.COLUMBIA.EDU
  267.         .columbia.edu = CC.COLUMBIA.EDU
  268.         columbia.edu = CC.COLUMBIA.EDU
  269. [realms]
  270.         CC.COLUMBIA.EDU = {
  271.                 kdc = kerberos.columbia.edu:88
  272.                 admin_server = kerberos.columbia.edu:749
  273.                 default_domain = cc.columbia.edu
  274.                 supported_enctypes = des-cbc-crc:normal des-cbc-crc:v4
  275.                 supported_keytypes = des:normal des-cbc-crc:v4
  276.         }
  277. 3.1.2. Secure Remote Password protocol in Kermit 95
  278. Beginning with version 1.1.16, Kermit 95 supports Telnet Authentication via
  279. Secure Remote Password protocol without any additional software.
  280. In addition, if the appropriate encryption patch (obtained from the Kermit
  281. Project) is installed, two-way encryption is also negotiated and used if
  282. authentication was negotiated.  The encryption patch is available WITH EXPORT
  283. RESTRICTIONS at:
  284.   http://www.kermit-project.org/noexport.html
  285. Kermit 95 contains support for authenticating incoming connections using SRP.
  286. Unfortunately, there are no Windows based tools for creating the SRP password
  287. file.  However, once a password and config file are created on Unix they can
  288. be copied to Windows.  Use the SRP_ETC or ETC environment variables to specify
  289. where the "tpasswd" and "tpasswd.conf" files are stored.
  290. 3.1.3. NT LAN Manager Authentication in Kermit 95
  291. NTLM authentication is a feature of Windows 95/98, NT, and Windows 2000.  It
  292. is used to authenticate Windows clients to Windows services.  Telnet Auth
  293. NTLM is implemented in the Microsoft Telnet Daemon that ships with NT
  294. Services for Unix and with Windows 2000.
  295. Windows 95/98 only contains support for the client whereas NT contains
  296. support for both client and server.  Kermit 95 can authenticate incoming
  297. connections with NTLM when it is executing on NT.
  298. 3.1.4. OpenSSL support for SSLv3 and TLSv1 in Kermit 95
  299. OpenSSL security is available in Kermit 95 1.1.18 and later.  OpenSSL sources
  300. may be retrieved from the web site http://www.openssl.org/.  As of this
  301. writing the current release of OpenSSL is 0.9.4 and 0.9.5 is under
  302. development.  Kermit 95 works with the binaries produced by compiling either
  303. 0.9.4 or 0.9.5.  Patches to enable OpenSSL to be compiled for OS/2 are
  304. located at:
  305.   http://www.geocities.com/SiliconValley/Hills/8057/files/openssl.html
  306. On Windows, OpenSSL must be compiled and linked to use the NT DLL option
  307. without Debug information.  Compiling the DLLs with support for debugging
  308. links the DLLs to an incompatible C Run Time Library DLL.
  309. On OS/2, OpenSSL must be compiled to use the DLL version of the run time
  310. library.
  311. For proper operation of OpenSSL and Kermit 95, the OpenSSL DLLs must be
  312. available in the PATH.  In addition, the OPENSSL_CONF environment variable
  313. should also be defined appropriately.
  314. OpenSSL does not define default locations for certificates and revocation
  315. lists therefore the appropriate SET AUTH { SSL, TLS } commands must be
  316. specified in the K95CUSTOM.INI (or IKSD.KSC) file in order for certificate
  317. verification to be performed.
  318. Due to patent licensing restrictions on RSA and IDEA algorithms within the
  319. United States, any binaries that the Kermit Project might distribute to
  320. provide SSL/TLS support for Kermit 95 do not contain RSA key exchange;
  321. RSA authentication; or RC2, RC4, and IDEA ciphers.
  322. If you wish to provide support for authentication of clients using public
  323. key certificates you must provide a custom X509_to_user() function to
  324. provide the certificate to local userid mapping.  An example function which
  325. uses the /UID field of the Certificate Subject name follows:
  326.   int
  327.   X509_to_user(X509 *peer_cert, char *userid, int len)
  328.   {
  329.       int err;
  330.       if (!(peer_cert && userid) || len <= 0)
  331.           return -1;
  332.       /* userid is in cert subject /UID */
  333.       err = X509_NAME_get_text_by_NID(X509_get_subject_name(peer_cert),
  334.                                        NID_uniqueIdentifier, userid, len);
  335.       if (err > 0)
  336.           return 0;
  337.       return -1;
  338.   }
  339. This function must be compiled into a DLL called "X5092UID.DLL".  It should
  340. be linked to the OpenSSL libraries and the DLL version of the run time
  341. library.
  342. 3.2. Authentication and Encryption in C-Kermit 7.0
  343. C-Kermit 7.0 may be compiled with support Kerberos 4, Kerberos 5, Secure
  344. Remote Password, and OpenSSL's SSLv3 and TLSv1.
  345. 3.2.1. Kerberos in C-Kermit 7.0
  346. This section is current as of C-Kermit 7.0.196 Beta.11.
  347. Kerberos IV and Kerberos V support is available for Unix versions of C-Kermit
  348. 7.0.  Kerberos support in C-Kermit is provided for both outgoing and incoming
  349. connections (SET HOST /SERVER * <port> /TELNET or the Internet Kermit
  350. Service).
  351. Kerberized C-Kermit binaries are not available due to export restrictions (see
  352. Section 2); you must build your own binary from a combination of Columbia
  353. source code and Kerberos libraries from other sources.
  354.  1a. Retrieve a Kerberos 5 1.1 source code kit from the appropriate site:
  355.        http://web.mit.edu/kerberos/www/ or
  356.        http://web.mit.edu/network/kerberos-form.html
  357.  1b. Choose a Kerberos 4 installation (from MIT) and retrieve a source code
  358.      kit from the appropriate site:
  359.        http://web.mit.edu/kerberos/www/ or
  360.        http://web.mit.edu/network/kerberos-form.html
  361.  2. Obtain the C-Kermit Authentication and Encryption support modules from
  362.     Columbia University.  These are not available by FTP due to export
  363.     restrictions.  Contact kermit-support@columbia.edu for details.
  364.  3. Build and install Kerberos on your system according to the instructions
  365.     that come with the Kerberos distribution you have chosen.
  366.  4. Add a new entry to the C-Kermit makefile for your platform, that adds the
  367.     following CFLAGS:
  368.       -DCK_AUTHENTICATION -DCK_KERBEROS
  369.     For Kerberos 4 include:
  370.       -DKRB4
  371.     For Kerberos 5 include:
  372.       -DKRB5
  373.     For Kerberos 4 compatibility mode with Kerberos 5:
  374.       -DKRB5 -DKRB524 -DKRB4
  375.     If you have the source file ck_crp.c and desire DES encryption include:
  376.       -DCK_ENCRYPTION -DCK_DES
  377.     Use "krbmit" as the target for builds with ck_crp.c and "krbmit-export"
  378.     for builds without ck_crp.c.
  379.     Add the path to the Kerberos header files using the -I switch.  The
  380.     location of these files are host specific.  For example:
  381.       -I/usr/kerberos/include
  382.     Add the path to the Kerberos libraries using the -L switch.  The
  383.     location of these files are host specific.  For example:
  384.       -L/usr/kerberos/lib
  385.     Add the appropriate libraries.  For Kerberos 4 include:
  386.       -lkrb
  387.     For Kerberos 5 include:
  388.       -lkrb5 -lcom_err -lcrypto
  389.     For Kerberos 4 compatibility mode with Kerberos 5 include:
  390.       -ldes425 -lkrb5 -lcom_err -lcrypto
  391.     Make sure the new entry points to the appropriate include files, and links
  392.     with the appropriate libraries.  Use the "linux+krb5", "linux+krb5+krb4",
  393.     and "sunos41gcc+krb4" makefile entries as models.
  394. Note that the select() version of the CONNECT-command module (ckucns.c) must
  395. be used rather than the older fork() based (ckucon.c) version.
  396. Keep the Kerberos support modules private, and put the C-Kermit binary where
  397. it can be used, but not where it can be accessed by anonymous ftp or by anyone
  398. who is outside the USA or Canada.
  399. When C-Kermit 7.0 is built with Kerberos support and installed as an Internet
  400. Kermit Service Daemon (IKSD), Kerberos is offered for authenticating incoming
  401. connections.  To authenticate incoming connections there must be a valid
  402. keytab file providing local access to the key necessary for decrypting
  403. meesages encoded in the server's key.
  404. 3.2.2. Secure Remote Password protocol in C-Kermit
  405. This section is current as of C-Kermit 7.0.196 Beta.11.
  406. Secure Remote Password (SRP) support is available for Unix versions of
  407. C-Kermit 7.0.  SRP support in C-Kermit is provided for both outgoing and
  408. incoming connections (SET HOST /SERVER * <port> /TELNET or the Internet Kermit
  409. Service).
  410. SRP C-Kermit binaries are not available due to export restrictions (see
  411. Section 2); you must build your own binary from a combination of Columbia
  412. source code and SRP libraries from other sources.
  413.  1. Retrieve the SRP 1.5.0 source code kit from:
  414.       http://srp.stanford.edu/srp/
  415.  2. Obtain the C-Kermit Authentication and Encryption support modules from
  416.     Columbia University.  These are not available by FTP due to export
  417.     restrictions.  Contact kermit-support@columbia.edu for details.
  418.  3. Build SRP with the GMP math library.  Be sure to read the installation
  419.     instructions before installing because SRP replaces many standard Unix
  420.     system files and failure to follow the procedures may leave you locked
  421.     out of your system.
  422.  4. Add a new entry to the C-Kermit makefile for your platform, that adds
  423.     the following CFLAGS:
  424.       -DCK_AUTHENTICATION -DCK_SRP
  425.     If you have the source file ck_crp.c include:
  426.       -DCK_ENCRYPTION
  427.     For CAST encryption (requires ck_crp.c) add:
  428.       -DCK_CAST
  429.     If using the Eric A. Young DES encryption library (available separately
  430.     and as a part of the OpenSSL project <http://www.openssl.org>)
  431.     (requires ck_crp.c) add:
  432.       -DCK_DES -DLIBDES
  433.     Use "srpmit" as the target for builds with ck_crp.c and "srpmit-export"
  434.     for builds without ck_crp.c.
  435.     Add the path to the SRP header files using the -I switch.  The
  436.     location of these files are host specific.  For example:
  437.       -I/usr/srp/include
  438.     Add the path to the SRP libraries using the -L switch.  The
  439.     location of these files are host specific.  For example:
  440.       -L/usr/srp/lib
  441.     Add the appropriate libraries.  (Include des only if you have the
  442.     Eric A. Young library):
  443.       -lsrp -lgmp -ldes
  444.     Make sure the new entry points to the appropriate include files, and
  445.     links with the appropriate libraries.  Use the "linux+srp" and
  446.     "linux+krb5+krb4+srp" makefile entries as models.
  447. Note that the select() version of the CONNECT-command module (ckucns.c) must
  448. be used rather than the older fork() based (ckucon.c) version.
  449. Keep the SRP support modules private, and put the C-Kermit binary where
  450. it can be used, but not where it can be accessed by anonymous ftp or by anyone
  451. who is outside the USA or Canada.
  452. When C-Kermit 7.0 is installed as an Internet Kermit Service (IKSD), SRP
  453. is offered for authenticating incoming connections.
  454. 3.2.3   OpenSSL support for SSLv3 and TLSv1 in C-Kermit 7.0.
  455. This section is current as of C-Kermit 7.0.196 Beta.11.
  456. OpenSSL support is available for Unix versions of C-Kermit 7.0.  SSLv3 and
  457. TLSv1 support in C-Kermit is provided for both outgoing and incoming
  458. connections (SET HOST /SERVER * <port> /TELNET or the Internet Kermit Service).
  459. OpenSSL C-Kermit binaries are not available due to export restrictions (see
  460. Section 2); you must build your own binary from a combination of Columbia
  461. source code and the OpenSSL libraries from other sources.
  462.  1. Retrieve the OpenSSL 0.9.4 source code kit from:
  463.       http://www.openssl.org/
  464.  2. Obtain the C-Kermit Authentication and Encryption support modules from
  465.     Columbia University.  These are not available by FTP due to export
  466.     restrictions.  Contact kermit-support@columbia.edu for details.
  467.  3. Build OpenSSL according to the installation instructions.  Be aware that
  468.     OpenSSL includes support for algorithms which are covered by patents
  469.     or claimed as intellectual property in the United States (and perhaps
  470.     some other countries.)  Use of these algorithms without the proper
  471.     licenses can make you liable to legal action.  Be sure to read the
  472.     entire README file before building and installing OpenSSL.
  473.     If you wish to support ADH ciphers you must define SSL_ALLOW_ADH when
  474.     building OpenSSL.
  475.  4. Add a new entry to the C-Kermit makefile for your platform, that adds
  476.     the following CFLAGS:
  477.       -DCK_AUTHENTICATION -DCK_SSL
  478.     Use "krbmit" as the target for builds.
  479.     Add the path to the OpenSSL header files using the -I switch.  The
  480.     location of these files is host-specific.  For example:
  481.       -I/usr/local/ssl/include
  482.     Add the path to the OpenSSL libraries using the -L switch.  The
  483.     location of these files is host-specific.  For example:
  484.       -L/usr/local/ssl/lib
  485.     Add the appropriate libraries:
  486.       -lssl -lcrypto
  487.     Make sure the new entry points to the appropriate include files, and
  488.     links with the appropriate libraries.  Use the "linux+openssl" and
  489.     "linux+krb5+krb4+srp+openssl" makefile entries as models.
  490. Note that the select() version of the CONNECT-command module (ckucns.c) must
  491. be used rather than the older fork() based (ckucon.c) version.
  492. Keep the OpenSSL support modules private, and put the C-Kermit binary where
  493. it can be used, but not where it can be accessed by anonymous ftp or by anyone
  494. who is outside the USA or Canada.
  495. When C-Kermit 7.0 is installed as an Internet Kermit Service (IKSD), TLSv1
  496. is offered for authenticating incoming connections via the Telnet START_TLS
  497. option.
  498. If you wish to provide support for authentication of clients using public
  499. key certificates you must provide a custom X509_to_user() function to
  500. provide the certificate to local userid mapping.  An example function which
  501. uses the /UID field of the Certificate Subject name may be activated by
  502. specifying
  503.    make <entry> KFLAGS=-DX509_UID_TO_USER
  504. when compiling C-Kermit.  The X509_to_user() function is the last function
  505. in the ck_ssl.c module.
  506. 3.2.4.  Shadow Passwords in C-Kermit 7.0.
  507. Shadow password files are used in many versions of Unix to provide a greater
  508. level of security for user passwords stored on the local disk.  The standard
  509. Unix password file must be world readable in order to processes to determine
  510. the location of the user's shell, home directory, and other permissions.  By
  511. moving the passwords into a separate file that only stores passwords, access
  512. to the file can be restricted to only those processes that are authorized to
  513. perform authentication.
  514. When C-Kermit 7.0 is used as the Internet Kermit Service on systems that are
  515. configured to use shadow passwords the following CFLAG must be added to the
  516. makefile entry:
  517.   -DCK_SHADOW
  518. 3.2.5.  Pluggable Authentication Module (PAM) support in C-Kermit 7.0
  519. PAM is implemented in many versions of Unix so system administrators can
  520. add new forms of authentication for interactive login (console, telnet,
  521. rlogin, ...) without requiring recompilation of each service.
  522. When C-Kermit 7.0 is used as the Internet Kermit Service on systems that are
  523. configured to use PAM the following CFLAG must be added to the makefile
  524. entry:
  525.   -DCK_PAM
  526. and the following libraries may have to be included:
  527.   -lpam -ldl
  528. C-Kermit 7.0's support for PAM is limited to Interactive Login.  PAM is
  529. not compatible with the Kermit Protocol's REMOTE LOGIN mechanism.
  530. 4. KERBEROS GLOSSARY
  531. Listed alphabetically, not topologically.
  532. Entity
  533.   In this document, a user, host, or service.
  534. Authentication
  535.   The process by which one entity proves its identity to another
  536.   entity on the Internet.
  537. Client
  538.   An entity that can obtain a ticket (see Ticket).
  539. Credentials Cache
  540.   The location where Kerberos stores tickets.  The credentials cache
  541.   can be a file or a buffer in memory.
  542. Expiration
  543.   Invalidation of a ticket after a certain period of time.  A ticket's
  544.   lifetime is chosen by the user when obtaining the ticket; the maximum
  545.   allowable lifetime for different kinds of tickets is set by the site
  546.   administrator.
  547. Forwardable Tickets
  548.   Kerberos tickets that can be forwarded (copied) to a remote machine,
  549.   where they can be used, eliminating the need to obtain new Ticket Granting
  550.   Tickets (q.v.) on that machine, e.g. for Telnetting from machine A to
  551.   machine B and then from machine B to machine C.
  552. Host
  553.   A computer that can be accessed over a network.
  554. KDC
  555.   Key Distribution Center, a machine that issues Kerberos tickets.
  556. Preauthenticated Ticket Granting Ticket Request
  557.   The client must include a time stamp encrypted with the user's password
  558.    when requesting the TGT from the KDC.  This allows the KDC to only
  559.    deliver a TGT to a valid user.  When preauthentication is not used
  560.    the TGT may be attacked offline to determine the user's password.
  561. Postdated Ticket
  562.   A ticket that does not become valid until after a specified time.
  563.   This allows for secure unattended operations.
  564. Principal
  565.   A string that names a specific entity to which a set of credentials may
  566.   be assigned.  It generally has three parts, primary/instance@REALM:
  567.    1. Primary:  Identifies the user or service.
  568.    2. Instance: Usually a hostname or REALM.
  569.    3. REALM:    Logical network served by a single Kerberos database and KDC.
  570. Proxiable Ticket
  571.   A ticket that may be given to a service to allow the service to impersonate
  572.   the user for whom the ticket has been issued.
  573. Ticket
  574.   A temporary set of electronic credentials that verifies the identity of
  575.   its owner to a particular service.
  576. TGT
  577.   Ticket Granting Ticket.  A special ticket that lets its owner obtain
  578.   additional tickets within the same realm.  A TGT is obtained during the
  579.   initial authentication process.
  580. 5. OVERVIEW OF AUTHENTICATION PROTOCOLS
  581. The following sections attempt to provide an overview of how each of the
  582. supported authentication protocols operates.
  583. 5.1 KERBEROS OVERVIEW
  584. Before making a Kerberized connection, you have to know which Kerberos
  585. version, 4 or 5, is supported by the host or service you want to connect
  586. to, and you must be registered in the Kerberos database at the host's
  587. site.  Contact the site administrator for details.
  588. Before authentication to a specific service (such as Telnet) can succeed, you
  589. must login to the site's Kerberos Ticket Granting Server.  Depending on the
  590. Kerberos implementation and installation options this may be done
  591. automatically when you log in to your operating system.  Otherwise you can
  592. do it with external utilities from MIT or Cygnus (such as Leash, KRB5, or
  593. KerbNet), or with Kermit's built-in functionality, explained below.
  594. Once a Ticket Granting Ticket (TGT) is retrieved, Kermit can use it to retrieve
  595. additional tickets for each host (service) you wish to connect to.  These
  596. service tickets may be used to authenticate you with the host automatically
  597. during a specified time interval.  When authentication is successful, you are
  598. logged in to the host and no Login: or Password: prompt does appear when
  599. connecting.
  600. Besides providing credentials for use during authentication, the service
  601. ticket also contains a session key to be used for encrypting the
  602. communications.  After the connection is authenticated, Kermit (if the
  603. necessary encryption capabilities are available) attempts to negotiate
  604. bidirectional encryption using either the DES-CFB64 or DES-OFB64 algorithms.
  605. If one of these is negotiated, it is used in one or both directions,
  606. depending on what the server agreed to.
  607. When Kerberos V authentication is used, Kermit supports credential forwarding
  608. by transferring your Ticket Granting Tickets to the host that you are
  609. connecting to, so you can make additional authenticated connections from that
  610. host to any others that accept those tickets.  This provides a single sign-on
  611. capability to the network.
  612. Successful operation of Kerberos requires that all machines have their dates
  613. and times synchronized.  Be aware that PC clocks can drift, and this can
  614. cause authentication failures.
  615. 5.2 SECURE REMOTE PASSWORD (SRP) OVERVIEW
  616. SRP requires no special configuration of the client.  When Kermit is used to
  617. connect to a host that supports SRP, the user name is transmitted
  618. automatically to the host and then a Password prompt is displayed in the
  619. Kermit command screen.  This indicates that the password will not be sent to
  620. the host over the communication channel.  Instead the password is used as part
  621. of a negotiation in which authentication is either mutual or none at all.
  622. The result of a mutual authentication is a shared secret which is used to
  623. generate two different keys for encrypting the incoming and outgoing data.
  624. SRP hosts support CAST-128-CFB64, CAST-128-OFB64, CAST-40-CFB64,
  625. CAST-40-OFB64, DES-CFB64, DES-OFB64, DES3-CFB64, DES3-OFB64 encryption
  626. algorithms.
  627. 5.3 NT LAN MANAGER (NTLM) OVERVIEW
  628. Microsoft's native authentication method is NTLM.  It is implemented in
  629. Windows 9x and NT and requires no configuration on the part of the user.
  630. When K95 is used on either Win9x or NT it can be used as an NTLM Telnet
  631. client to authenticate to Microsoft's NT Services for Unix Telnet Server
  632. or to a K95 configured to accept incoming connections.
  633. When K95 is used on NT it can be configured to accept incoming connections
  634. and authenticate NTLM Telnet clients.
  635. NTLM is a weak form of authentication.  It provides no shared secret
  636. and cannot be used as a means of securing a connection with encryption.
  637. 5.4 SSLv3 and TLSv1 OVERVIEW
  638. (Also see Section 14 for an introduction to the concept of certificates.)
  639. Secure Sockets Layer Version 3 (SSLv3) and its successor Transport Layer
  640. Security Version 1 (TLSv1) were originally designed for use by Web browsers.
  641. They provide a framework for using public-key certificates to negotiate
  642. server and (optionally) client authentication and bidirectional encryption.
  643. The encryption provided by SSLv3 and TLSv1 is stronger than that provided
  644. by the Telnet Encryption option.
  645. SSLv3 and TLSv1 connections may be negotiated in two different ways.  First,
  646. the connection may be SSL/TLS-only, which is used when connecting to HTTPS
  647. services or SSL/TLS tunnels.  SSL/TLS may also be negotiatied after the
  648. connection is established via negotiations performed in some other protocol
  649. (such as Telnet.)
  650. Kermit supports both kinds of connections:
  651.  . Pure SSLv3 connections via SET HOST <host> <port> /SSL
  652.  . Pure TLSv1 connections via SET HOST <host> <port> /TLS
  653.  . SSLv3 connections negotiated by Tim Hudson's Telnet AUTH SSL option
  654.  . TLSv1 connections negotiated by the IETF TN3270E Working Group's
  655.    TELNET START_TLS option
  656. The SSL and TLS negotations provide the client with authentication of the
  657. host computer when the host's X.509 certificate is verified.  Authentication
  658. of the client may be performed by the use of an X.509 certificate issued to
  659. the end user, or via one of the supported Telnet Authentication methods.
  660. Even though the data channel is encrypted, the transmission of passwords to
  661. the host should still be avoided to prevent theft by a compromised host.
  662. For verification of certificates to be performed, the root certificates of
  663. the certificate authorities (CAs) must be available.  If you are not acting
  664. as your own CA you might want to use the file of root certificates at
  665. http://www.e-softinc.com/cacerts.txt.  This file is produced by E-Soft, Inc.,
  666. as part of its monthly survey on secure server usage.  After downloading,
  667. this file can be used by Kermit via the command:
  668.   SET AUTH SSL VERIFY-FILE <path>/cacerts.txt
  669. When Kermit is used as an IKSD, client certificates can be used for automatic
  670. login.  If a certificate-to-userid mapping function is provided, the IKSD
  671. logs the user in automatically if the certificate is verified and the
  672. specified userid exists on the system.  Kermit also supports the use of a
  673. ".tlslogin" file that allows a certificate to be used to login automatically
  674. to an account without a certificate-to-userid mapping function.  When Kermit
  675. receives a username via the Telnet New-Environment variable after it has
  676. received and verified a client certificate, it looks in the home directory
  677. corresponding to the username for a file called ".tlslogin".  If the file
  678. contains the certificate presented by the client, the client is logged in as
  679. the requested user without a password.
  680. The method for negotiating Tim Hudson's Telnet AUTH SSL option is open to a
  681. man-in-the-middle attack which is capable of disabling the use of SSL before
  682. the negotiation is begun.  It should only be used in conjunction with:
  683.    SET TELNET AUTHENTICATION TYPE SSL
  684.    SET TELOPT AUTHENTICATION REQUIRED
  685. When using IKSD with START_TLS you should create an /etc/iksd.conf file
  686. and place within it commands pointing to the certificate and key files:
  687.   set auth tls rsa-cert-file /usr/local/ssl/certs/telnetd-rsa.pem
  688.   set auth tls rsa-key-file  /usr/local/ssl/certs/telnetd-rsa-key.pem
  689.   set auth tls dsa-cert-file /usr/local/ssl/certs/telnetd-dsa.pem
  690.   set auth tls dsa-key-file  /usr/local/ssl/certs/telnetd-dsa-key.pem
  691. as well as the list of ciphers that you are willing to accept:
  692.   set auth tls cipher 3DES:DSS
  693. Note: A Unix telnetd that supports START_TLS is available from
  694.   ftp://ftp.runestig.com/pub/starttls/inetutils-1.3.2-tls.tar.gz
  695. This telnetd supports verification of certificate chains for both client and
  696. server including support for certificate revocation lists.
  697. 6. AUTHENTICATION AND ENCRYPTION COMMANDS
  698. Kermit has a full repertoire of commands for selecting and controlling
  699. security.  Bear in mind that these are targeted primarily at the network
  700. or site manager and not at the "ordinary" user.  In a typical application,
  701. a university that has a site license for Kermit 95 creates a customized
  702. installation CD for its user community that contains all the appropriate
  703. security (and other) setups, so end users get secure connections without
  704. doing anything special or even knowning that they have them.
  705. In all Kermit commands:
  706.   KERBEROS4 can be abbreviated KRB4 or K4
  707.   KERBEROS5 can be abbreviated KRB5 or K5
  708. Some of Kermit's Kerberos-related commands are rather complex, but remember
  709. that you don't have to memorize them, or any other Kermit commands.  Use "?"
  710. at any point to feel your way through the command, or type HELP for the
  711. desired command to see a brief explanation.
  712. The CHECK KERBEROS command tells whether your version of Kermit has been built
  713. to include the Kerberos support even if it cannot function on your system.
  714. The CHECK NTLM command tells whether your version of Kermit has been built
  715. to include the NTLM support even if it cannot function on your system.
  716. The CHECK SRP command tells whether your version of Kermit has been built
  717. to include the SRP support even if it cannot function on your system.
  718. The CHECK SSL/TLS command tells whether your version of Kermit has been built
  719. to include the SSL/TLS support even if it cannot function on your system.
  720. IF AVAILABLE KERBEROS4 (or KRB4, or K4) tells whether Kerberos 4 is actually
  721. available in your version of Kermit (e.g. if the Kerberos 4 DLLs are installed
  722. on your Windows 95 PC).
  723. IF AVAILABLE KERBEROS5 (KRB5, K5) tells whether Kerberos 5 is available in
  724. your version of Kermit.
  725. IF AVAILABLE NTLM tells whether NT Lan Manager protocol is available in your
  726. version of Kermit.
  727. IF AVAILABLE SRP tells whether Secure Remote Password protocol is available
  728. in your version of Kermit.
  729. IF AVAILABLE { SSL, TLS } tells whether SSL/TLS protocol is available in your
  730. version of Kermit.
  731. 6.1. TELNET-Related Security Commands
  732. SET TELOPT [{ /CLIENT, /SERVER }] AUTHENTICATION
  733.         { ACCEPTED, REFUSED, REQUESTED, REQUIRED }
  734.   ACCEPT or REFUSE authentication bids, or actively REQUEST authentication.
  735.   REQUIRED refuses and closes the connection if authentication is not
  736.   successfully negotiated when either making or accepting connections.
  737.   ACCEPTED by default.
  738. SET TELNET AUTHENTICATION TYPE { AUTOMATIC, KERBEROS4, KERBEROS5, NTLM, SRP,
  739.                                  SSL, NONE }
  740.   AUTOMATIC allows the host to choose the preferred type of authentication.
  741.   Other values allow a specific authentication method to be specified.
  742.   AUTOMATIC is the default.  The list of options varies depending on the
  743.   authentication types selected at compilation time.  When combined with SET
  744.   TELOPT AUTH REQUIRED, a specific authentication method can be required.
  745. SET TELNET AUTHENTICATION FORWARDING { ON, OFF }
  746.   When Kermit is the client, set this to ON to forward forwardable Kerberos V
  747.   Ticket Granting Tickets to the host after authentication is complete, so you
  748.   can make additional authenticated connections from there.  When Kermit is
  749.   the server, set this to ON to accept forwardable Kerberos V TGTs from the
  750.   client.  OFF by default.
  751. SET TELNET AUTHENTICATION HOW-FLAG { ANY, MUTUAL, ONE-WAY }
  752.   Specifies which values for the HOW-FLAG should be accepted as a client
  753.   or offered as a server.  The default is ANY.
  754. SET TELNET AUTHENTICATION ENCRYPT-FLAG { ANY, NONE, TELOPT }
  755.   Specifies which values for the ENCRYPT-FLAG should be accepted as a client
  756.   or offered as a server.  The default is ANY.
  757. SET TELOPT [{ /CLIENT, /SERVER }] ENCRYPTION
  758.         { ACCEPTED, REFUSED, REQUESTED, REQUIRED }
  759.         { ACCEPTED, REFUSED, REQUESTED, REQUIRED }
  760.   The first parameter specifies the Kermit to peer state.  The second
  761.   parameter specifies the peer to Kermit state.  The default is ACCEPTED
  762.   ACCEPTED.
  763. SET TELNET ENCRYPTION TYPE { AUTOMATIC, CAST128_CFB64, CAST128_OFB64,
  764.   CAST5_40_CFB64, CAST5_40_OFB64, DES_CFB64, DES_OFB64,
  765.   DES3_CFB64, DES3_OFB64, NONE }
  766.   AUTOMATIC allows the host to choose the preferred type of encryption.
  767.   Other values allow a specific encryption method to be specified.
  768.   AUTOMATIC is the default.  The list of options varies depending
  769.   on the encryption types selected at compilation time.  An encryption
  770.   method can only be used if there is enough key data available.
  771.   Kerberos can use only DES encryption because it provides a shared
  772.   secret only 56 bits in length.
  773. SET TELOPT [{ /CLIENT, /SERVER }] START_TLS
  774.         { ACCEPTED, REFUSED, REQUESTED, REQUIRED }
  775.   ACCEPT or REFUSE a request to negotiate TLS, or actively REQUEST
  776.   that TLS be negotiated.  REQUIRED refuses and closes the connection if
  777.   the peer refuses to negotiate TLS or the TLS negotiations end in failure.
  778.   ACCEPTED by default when a client.  REQUESTED by default when a server.
  779. SET TELNET ENVIRONMENT USER <name>
  780. SET LOGIN USERID <name>
  781.   If a <name> is given, it sent to host during Telnet negotiations; if this
  782.   switch is given but the string is omitted, no user ID is sent to the host.
  783.   If this command is not given, your current USERID value, v(userid), is
  784.   sent.  When a userid is sent to the host it is a request to login as the
  785.   specified user.
  786. SET LOGIN PASSWORD <password>
  787.   If a <password> is given, it is treated as the password to be used (if
  788.   required) by any Telnet Authentication protocol (Kerberos Ticket retrieval,
  789.   Secure Remote Password (SRP), or X.509 certificate private key decryption.)
  790.   If no password is specified a prompt is issued to request the password if
  791.   one is required for the negotiated authentication method.
  792. SET TELNET DEBUG ON
  793.   Displays all TELNET negotiations in full detail.
  794. TELNET /AUTH:<type> /ENCRYPT:<type> /USERID:[<name>] /PASSWORD:[<string>]
  795.        <host> <port>
  796.   The TELNET command is a shortcut for making interactive connections.
  797.   It is the equivalent of specifying:
  798.     SET TELOPT AUTH ...
  799.     SET TELNET AUTH TYPE ...
  800.     SET TELOPT ENCRYPT ...
  801.     SET TELNET ENCRYPT TYPE ...
  802.     SET LOGIN USERID ...
  803.     SET LOGIN PASSWORD ...
  804.     SET HOST /CONNECT <host> <port> /TELNET
  805.   /AUTH:<type> is equivalent to SET TELNET AUTH TYPE <type> and
  806.   SET TELOPT AUTH REQUIRED with the following exceptions.  If the type
  807.   is AUTO, then SET TELOPT AUTH REQUESTED is executed and if the type
  808.   is NONE, then SET TELOPT AUTH REFUSED is executed.
  809.   /ENCRYPT:<type> is equivalent to SET TELNET ENCRYPT TYPE <type>
  810.   and SET TELOPT ENCRYPT REQUIRED REQUIRED with the following exceptions.
  811.   If the type is AUTO then SET TELOPT AUTH REQUESTED REQUESTED is executed
  812.   and if the type is NONE then SET TELOPT ENCRYPT REFUSED REFUSED is
  813.   executed.
  814.   /USERID:[<name>]
  815.   This switch is equivalent to SET LOGIN USERID <name> or SET TELNET
  816.   ENVIRONMENT USER <name>.  If a string is given, it sent to host during
  817.   Telnet negotiations; if this switch is given but the string is omitted, no
  818.   user ID is sent to the host.  If this switch is not given, your current
  819.   USERID value, v(userid), is sent.  When a userid is sent to the host
  820.   it is a request to login as the specified user.
  821.   /PASSWORD:[<string>]
  822.   This switch is equivalent to SET LOGIN PASSWORD.  If a string is given,
  823.   it is treated as the password to be used (if required) by any Telnet
  824.   Authentication protocol (Kerberos Ticket retrieval, Secure Remote
  825.   Password, or X.509 certificate private key decryption.)  If no password
  826.   switch is specified a prompt is issued to request the password if one
  827.   is required for the negotiated authentication method.
  828. SHOW TELNET
  829.   Displays current TELNET settings, including authentication and
  830.   encryption.
  831. 6.2. The SET AUTHENTICATION Command
  832. The SET AUTHENTICATION command lets you configure the behavior of Kermit's
  833. authentication methods and set defaults for the AUTHENTICATE commands so you
  834. don't always have to include all the switches if you give more than one
  835. AUTHENTICATE command in one Kermit session:
  836. If you always use the same setup, you can put the appropropriate SET
  837. AUTHENTICATION commands in your Kermit customization file: k95custom.ini
  838. (Windows) or .mykermrc (UNIX).
  839. 6.2.1 Kerberos Set Commands
  840. SET AUTHENTICATION { KERBEROS4, KERBEROS5 } AUTODESTROY
  841.   { ON-CLOSE, ON-EXIT, NEVER }
  842.   When ON, Kermit destroys all credentials in the default
  843.   credentials cache upon Kermit termination.  Default is NEVER.
  844. SET AUTHENTICATION { KERBEROS4, KERBEROS5 } AUTOGET { ON, OFF }
  845.   When ON, if the host offers Kerberos 4 or Kerberos 5 authentication and
  846.   Kermit is configured to use that authentication method and there is no
  847.   TGT, Kermit automatically attempts to retrieve one by prompting for the
  848.   password (and principal if needed.)  Default is ON.
  849. SET AUTHENTICATION KERBEROS5 CREDENTIALS-CACHE <filename>
  850.   Specifies an alternative credentials cache.  This is useful when you need
  851.   to maintain two or more sets of credentials for different realms or
  852.   roles.  The default is specified by the environment variable KRB5CCNAME
  853.   or as reported by the Kerberos 5 library.
  854. SET AUTHENTICATION KERBEROS5 FORWARDABLE { ON, OFF }
  855.   ON specifies that Kerberos 5 credentials should be forwardable to the
  856.   host.  If SET TELNET AUTHENTICATION FORWARDING is ON, forwardable
  857.   credentials are sent to the host.  Default is OFF.
  858. SET AUTHENTICATION KERBEROS5 GET-K4-TGT { ON, OFF }
  859.   ON specifies that Kerberos 4 credentials should be requested each
  860.   time Kerberos 5 credentials are requested with AUTH KERBEROS5 INIT.
  861.   The default is OFF.
  862. SET AUTHENTICATION KERBEROS4 INSTANCE <instance>
  863.   Allows a Kerberos 4 instance to be specified as a default (if needed).
  864. SET AUTHENTICATION { KERBEROS4, KERBEROS5 } LIFETIME <minutes>
  865.   Specifies the lifetime of the TGTs requested from the KDC.  The default
  866.   is 600 minutes (10 hours).
  867. SET AUTHENTICATION KERBEROS4 PREAUTH { ON, OFF }
  868.   Allows Kerberos 4 preauthenticated TGT requests to be turned off.  The
  869.   default is ON.  Only use if absolutely necessary.  We recommend that
  870.   preauthenticated requests be required for all tickets returned by a KDC
  871.   to a requestor.
  872. SET AUTHENTICATION { KERBEROS4, KERBEROS5 } PRINCIPAL <name>
  873.   When Kermit starts, it attempts to set the principal name to that stored
  874.   in the current credentials cache.  If no credential cache exists, the
  875.   current SET LOGIN USERID value is used.  SET LOGIN USERID is set to the
  876.   operating systems current username when Kermit is started.  To force
  877.   Kermit to prompt the user for the principal name when requesting TGTs,
  878.   place
  879.     SET AUTH K4 PRINCIPAL {}
  880.     SET AUTH K5 PRINCIPAL {}
  881.   in the Kermit initialization file or connection script.
  882. SET AUTHENTICATION { KERBEROS4, KERBEROS5 } PROMPT PASSWORD <prompt>
  883.   Specifies a custom prompt to be used when prompting for a password.  The
  884.   Kerberos prompt strings may contain two "%s" replacement fields.  The
  885.   first %s is replaced by the principal name; the second by the realm.
  886. SET AUTHENTICATION { KERBEROS4, KERBEROS5 } PROMPT PRINCIPAL <prompt>
  887.   Specifies a custom prompt to be used when prompting for the Kerberos
  888.   principal name.  No %s replacement fields may be included.  Kermit
  889.   prompts for a principal name when retrieving a TGT if the command:
  890.     SET AUTHENTICATION { KERBEROS4, KERBEROS5 } PRINCIPAL {}
  891.   has been issued.
  892. SET AUTHENTICATION KERBEROS5 PROXIABLE { ON, OFF }
  893.   When ON, specifies that Kerberos 5 credentials should be proxiable.
  894.   The default is OFF.
  895. SET AUTHENTICATION KERBEROS5 RENEWABLE <minutes>
  896.   When <minutes> is greater than the ticket lifetime a TGT may be
  897.   renewed with AUTH K5 INIT /RENEW instead of granting a new ticket
  898.   as long as the ticket is not expired and it's within the renewable
  899.   lifetime.  Default is 0 (zero) minutes.
  900. SET AUTHENTICATION { KERBEROS4, KERBEROS5 } REALM <name>
  901.   If no default is set, the default realm configured for the Kerberos
  902.   libraries is used.  Abbreviations are accepted.
  903. SET AUTHENTICATION { KERBEROS4, KERBEROS5 } SERVICE-NAME <name>
  904.   This command specifies the service ticket name used to authenticate
  905.   to the host when Kermit is used as a client; or the service ticket
  906.   name accepted by Kermit when it is acting as the host.
  907.   If no default is set, the default service name for Kerberos 4 is
  908.   "rcmd" and for Kerberos 5 is "host".
  909. 6.2.2 SRP Set Commands
  910. SET AUTHENTICATE SRP PROMPT PASSWORD <text>
  911.   Specifies a custom prompt to be used when prompting for a password.
  912.   <prompt> may contain a single instance of "%s" which is replaced
  913.   by the user's login name.
  914. 6.2.3 SSL and TLS (OpenSSL) Set Commands
  915. In all of the following commands "SSL" and "TLS" are aliases.
  916. SET AUTHENTICATE { SSL, TLS } CIPHER-LIST <list of ciphers>
  917.   This command applies to both SSL and TLS.  A colon-separated list of any
  918.   of the following (case-sensitive) options is accepted, depending on the
  919.   options chosen when OpenSSL was compiled (without the doublequotes):
  920.   Key Exchange Algorithms:
  921.     "kRSA"      RSA key exchange
  922.     "kDHr"      Diffie-Hellman key exchange (key from RSA cert)
  923.     "kDHd"      Diffie-Hellman key exchange (key from DSA cert)
  924.     "kEDH'      Ephemeral Diffie-Hellman key exchange (temporary key)
  925.   Authentication Algorithm:
  926.     "aNULL"     No authentication
  927.     "aRSA"      RSA authentication
  928.     "aDSS"      DSS authentication
  929.     "aDH"       Diffie-Hellman authentication
  930.   Cipher Encoding Algorithm:
  931.     "eNULL"     No encodiing
  932.     "DES"       DES encoding
  933.     "3DES"      Triple DES encoding
  934.     "RC4"       RC4 encoding
  935.     "RC2"       RC2 encoding
  936.     "IDEA"      IDEA encoding
  937.   MAC Digest Algorithm:
  938.     "MD5"       MD5 hash function
  939.     "SHA1"      SHA1 hash function
  940.     "SHA"       SHA hash function (should not be used)
  941.   Aliases:
  942.     "ALL"       all ciphers
  943.     "SSLv2"     all SSL version 2.0 ciphers (should not be used)
  944.     "SSLv3"     all SSL version 3.0 ciphers
  945.     "EXP"       all export ciphers (40-bit)
  946.     "EXPORT56"  all export ciphers (56-bit)
  947.     "LOW"       all low strength ciphers (no export)
  948.     "MEDIUM"    all ciphers with 128-bit encryption
  949.     "HIGH"      all ciphers using greater than 128-bit encryption
  950.     "RSA"       all ciphers using RSA key exchange
  951.     "DH"        all ciphers using Diffie-Hellman key exchange
  952.     "EDH"       all ciphers using Ephemeral Diffie-Hellman key exchange
  953.     "ADH"       all ciphers using Anonymous Diffie-Hellman key exchange
  954.     "DSS"       all ciphers using DSS authentication
  955.     "NULL"      all ciphers using no encryption
  956. Each item in the list may include a prefix modifier:
  957.     "+"         move cipher(s) to the current location in the list
  958.     "-"         remove cipher(s) from the list (may be added again by
  959.                 a subsequent list entry)
  960.     "!"         kill cipher from the list (it may not be added again
  961.                 by a subsequent list entry)
  962. If no modifier is specified the entry is added to the list at the current
  963. position.  "+" may also be used to combine tags to specify entries such as
  964. "RSA+RC4" describes all ciphers that use both RSA and RC4.
  965. For example, all available ciphers not including ADH key exchange:
  966.   ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
  967. All algorithms including ADH and export but excluding patented algorithms:
  968.   HIGH:MEDIUM:LOW:EXPORT56:EXP:ADH:!kRSA:!aRSA:!RC4:!RC2:!IDEA
  969. The OpenSSL command
  970.   openssl ciphers -v <list of ciphers>
  971. may be used to list all of the ciphers and the order described by a specific
  972. <list of ciphers>.
  973. SET AUTHENTICATE { SSL, TLS } CRL-DIR <directory>
  974.   Specifies a directory that contains certificate revocation files, where
  975.   each file is named by the hash of the certificate issuer name.
  976.   OpenSSL expects the hash symlinks to be made like this:
  977.     ln -s crl.pem `openssl crl -hash -noout -in crl.pem`.r0
  978.   Since all file systems do not have symlinks you can use the following
  979.   command in Kermit to copy the crl.pem file to the hash file name:
  980.      copy crl.pem {fcommand(openssl crl -hash -noout -in crl.pem).r0}
  981.   This produces a hash based on the issuer field in the CRL such
  982.   that the issuer field of a Cert may be quickly mapped to the
  983.   correct CRL.
  984. SET AUTHENTICATE { SSL, TLS } CRL-FILE <filename>
  985.   Specifies a file that contains a list of certificate revocations.
  986. SET AUTHENTICATE { SSL, TLS } DEBUG { ON, OFF }
  987.   Tells whether debug information should be displayed about the SSL/TLS
  988.   connection.  When DEBUG is ON, the VERIFY command does not terminate
  989.   connections when set to FAIL-IF-NO-PEER-CERT and a certificate is
  990.   presented that cannot be successfully verified; instead each error is
  991.   displayed but the connection automatically continues.
  992. SET AUTHENTICATE { SSL, TLS } DH-PARAM-FILE <filename>
  993.   Specifies a file containing DH parameters which are used to generate
  994.   temporary DH keys.  If a DH parameter file is not provided Kermit uses a
  995.   fixed set of parameters depending on the negotiated key length.  Kermit
  996.   provides DH parameters for key lengths of 512, 768, 1024, 1536, and 2048
  997.   bits.
  998. SET AUTHENTICATE { SSL, TLS } DSA-CERT-FILE <filename>
  999.   Specifies a file containing a DSA certificate to be sent to the peer to
  1000.   authenticate the host or end user.  The file may contain the matching DH
  1001.   private key instead of using the DSA-KEY-FILE command.
  1002. SET AUTHENTICATE { SSL, TLS } DSA-KEY-FILE <filename>
  1003.   Specifies a file containing the private DH key that matches the DSA
  1004.   certificate specified with DSA-CERT-FILE.  This command is only necessary
  1005.   if the private key is not appended to the certificate in the file
  1006.   specified by DSA-CERT-FILE.
  1007. Note: When Kermit is running as an IKSD it cannot support encrypted private
  1008. keys.  If your private key file is encrypted you can use the following command
  1009. to unencrypted (provided you know that pass phrase):
  1010.   openssl dsa -in <encrypted-key-file> -out <unencrypted-key-file>
  1011. SET AUTHENTICATE { SSL, TLS } RSA-CERT-FILE <filename>
  1012.   Specifies a file containing a RSA certificate to be sent to the peer to
  1013.   authenticate the host or end user.  The file may contain the matching RSA
  1014.   private key instead of using the RSA-KEY-FILE command.
  1015. SET AUTHENTICATE { SSL, TLS } RSA-KEY-FILE <filename>
  1016.   Specifies a file containing the private RSA key that matches the RSA
  1017.   certificate specified with RSA-CERT-FILE.  This command is only necessary
  1018.   if the private key is not appended to the certificate in the file
  1019.   specified by RSA-CERT-FILE.
  1020. Note: When Kermit is running as an IKSD it cannot support encrypted private
  1021. keys.  If your private key file is encrypted you can use the following command
  1022. to unencrypted (provided you know that pass phrase):
  1023.   openssl rsa -in <encrypted-key-file> -out <unencrypted-key-file>
  1024. SET AUTHENTICATE { SSL, TLS } VERBOSE { ON, OFF }
  1025.   Specifies whether information about the authentication (the certificate
  1026.   chain) should be displayed upon making a connection.
  1027. SET AUTHENTICATE { SSL, TLS } VERIFY { NO, PEER-CERT, FAIL-IF-NO-PEER-CERT }
  1028.   Specifies whether certificates should be requested from the peer; whether
  1029.   they should be verified when they are presented; and whether they should
  1030.   be required.  When set to NO (the default for IKSD), Kermit does not
  1031.   request that the peer send a certificate and if one is presented it is
  1032.   ignored.  When set to PEER-CERT (the default when not IKSD), Kermit
  1033.   requests a certificate be sent by the peer.  If the certificate is
  1034.   presented, it is verified.  Any errors during the verification process
  1035.   result in queries to the end user.  When set to FAIL-IF-NO-PEER-CERT,
  1036.   Kermit asks the peer to send a certificate.  If the certificate is not
  1037.   presented or fails to verify successfully, the connection is terminated
  1038.   without querying the user.
  1039.   If an anonymous cipher (i.e., ADH) is desired the NO setting must be
  1040.   used; otherwise the receipt of the peer certificate request is
  1041.   interpreted as a protocol error and the negotiation fails.
  1042.   If you wish to allow the peer to authenticate using either an X.509
  1043.   certificate to userid mapping function or via use of a ~/.tlslogin file,
  1044.   you must use either PEER-CERT or FAIL-IF-NO-PEER-CERT.  Otherwise, any
  1045.   certificates that are presented are ignored.  In other words, use NO if
  1046.   you want to disable the ability to use certificates to authenticate a
  1047.   peer.
  1048. SET AUTHENTICATE { SSL, TLS } VERIFY-DIR <directory>
  1049.   Specifies a directory that contains root CA certificate files used to
  1050.   verify the certificate chains presented by the peer.  Each file is named
  1051.   by a hash of the certificate.
  1052.   OpenSSL expects the hash symlinks to be made like this:
  1053.     ln -s cert.pem `openssl x509 -hash -noout -in cert.pem`.0
  1054.   Since all file systems do not have symlinks you can use the following
  1055.   command in Kermit to copy the cert.pem file to the hash file name:
  1056.      copy cert.pem {fcommand(openssl x509 -hash -noout -in cert.pem).0}
  1057.   This produces a hash based on the subject field in the cert such that the
  1058.   certificate may be quickly found.
  1059. SET AUTHENTICATE { SSL, TLS } VERIFY-FILE <file>
  1060.   Specifies a file that contains root CA certificates to be used for
  1061.   verifying certificate chains.
  1062. 6.3. The AUTHENTICATE Command (Kerberos Only)
  1063. The AUTHENTICATE command obtains or destroys Kerberos tickets and lists
  1064. information about them.  The general format is:
  1065.   AUTHENTICATE { KERBEROS4, KERBEROS5 [ switches ] } <action> [ switches ]
  1066. The use of command switches is described in ckermit2.txt, section 1.5.
  1067. The actions are INITIALIZE, DESTROY, and LIST-CREDENTIALS:
  1068.   AUTH {K4,K5} { INITIALIZE [switches], DESTROY, LIST-CREDENTIALS [switches] }
  1069. The INITIALIZE command is the most complex, and its format is different for
  1070. Kerberos 4 and Kerberos 5.  For Kerberos 4, the format is:
  1071. AUTH K4 INITIALIZE [ /INSTANCE:<name> /LIFETIME:<minutes> -
  1072.   /PASSWORD:<password> /PREAUTH /REALM:<name> <principal> ]
  1073. All switches are optional.  Kerberos 4 INITIALIZE switches are as follows:
  1074. /INSTANCE:<name>
  1075.   Allows an Instance to be specified (see Glossary).
  1076. /LIFETIME:<number>
  1077.   Specifies the requested lifetime in minutes for the ticket.  If no lifetime
  1078.   is specified, 600 minutes is used.  If the lifetime is greater than the
  1079.   maximum supported by the ticket granting service, the resulting lifetime
  1080.   is shortened accordingly.
  1081. /NOT-PREAUTH
  1082.   Instructs Kermit to send a ticket granting ticket (TGT) request to the KDC
  1083.   without any preauthentication data.
  1084. /PASSWORD:<string>
  1085.   Allows the inclusion of a password in a script file.  If no /PASSWORD switch
  1086.   is included, you are prompted on a separate line.  The password switch is
  1087.   provided for use by automated scripts.  However, we strongly recommend that
  1088.   it not be used because clear text passwords can be easily compromised.
  1089. /PREAUTH
  1090.   Instructs Kermit to send a preauthenticated ticket granting ticket (TGT)
  1091.   request to the KDC instead of a plaintext request.  The default when
  1092.   supported by the Kerberos libraries.
  1093. /REALM:<name>
  1094.   Allows an alternative Realm to be specified (see Glossary).
  1095. <principal>
  1096.   may be of the form:
  1097.   userid[.instance[.instance]]@[realm]
  1098.   Can be omitted if it is the same as your username or SET LOGIN USERID
  1099.   value on the client system.
  1100. The format for Kerberos 5 is as follows:
  1101. AUTH K5 [ /CACHE:<filename> ] { INITIALIZE ..., DESTROY, LIST-CREDENTIALS ...}
  1102. The INITIALIZE command for Kerberos 5 can include a number of switches;
  1103. all are optional:
  1104. AUTH K5 [ /CACHE:<filename> ] INITITIALIZE [ /ADDRESSES:<addr-list>
  1105.   /FORWARDABLE /KERBEROS4 /LIFETIME:<minutes> /PASSWORD:<password>
  1106.   /POSTDATE:<date-time> /PROXIABLE /REALM:<name> /RENEW /RENEWABLE:<minutes>
  1107.   /SERVICE:<name> /VALIDATE <principal> ]
  1108. Kerberos 5 INITIALIZE switches are:
  1109. /ADDRESSES:{list of ip-addresses}
  1110.   Specifies a list of IP addresses that should be placed in the Ticket
  1111.   Granting Ticket in addition to the local machine addresses.
  1112. /FORWARDABLE
  1113.   Requests forwardable tickets.
  1114. /KERBEROS4
  1115.   Instructs Kermit to get Kerberos 4 tickets in addition to Kerberos 5
  1116.   tickets.  If Kerberos 5 tickets are not supported by the server, a mild
  1117.   warning is printed and Kerberos 4 tickets are requested.
  1118. /LIFETIME:<number>
  1119.   Specifies the requested lifetime in minutes for the ticket.  If no
  1120.   lifetime is specified, 600 minutes is used.  If the lifetime is greater
  1121.   than the maximum supported by the ticket granting service, the resulting
  1122.   lifetime is shortened.
  1123. /NO-KERBEROS4
  1124.   Instructs Kermit to not attempt to retrieve Kerberos 4 credentials.
  1125. /NOT-FORWARDABLE
  1126.   Requests non-forwardable tickets.
  1127. /NOT-PROXIABLE
  1128.   Requests non-proxiable tickets.
  1129. /PASSWORD:<string>
  1130.   Allows the inclusion of a password in a script.  If no password is
  1131.   specified you are prompted for one.  The password switch is provided for
  1132.   use by automated scripts.  However, we strongly recommend that it not be
  1133.   used because clear-text passwords can be easily compromised.  See Chapter
  1134.   19 of "Using C-Kermit".
  1135. /POSTDATE:<date-time>
  1136.   Requests a postdated ticket, valid starting at <date-time>.  Postdated
  1137.   tickets are issued with the invalid flag set, and need to be fed back to
  1138.   the KDC before use with the /VALIDATE switch.  See ckermit2.txt section
  1139.   1.6 for acceptable date-time formats.
  1140. /PROXIABLE
  1141.   Requests proxiable tickets.
  1142. /REALM:<string>
  1143.   Allows an alternative realm to be specified.
  1144. /RENEW
  1145.   Requests renewal of a renewable Ticket Granting Ticket.  Note that
  1146.   an expired ticket cannot be renewed even if it is within its renewable
  1147.   lifetime.
  1148. /RENEWABLE:<number>
  1149.   Requests renewable tickets, with a total lifetime of <number> minutes.
  1150. /SERVICE:<string>
  1151.   Allows a service other than the ticket granting service to be specified.
  1152. /VALIDATE
  1153.   Requests that the Ticket Granting Ticket in the cache (with the invalid
  1154.   flag set) be passed to the KDC for validation.  If the ticket is within
  1155.   its requested time range, the cache is replaced with the validated
  1156.   ticket.
  1157. <principal>
  1158.   May be of the form:
  1159.     userid[/instance][@realm]
  1160.   Can be omitted if it is the same principal as stored in the current ticket
  1161.   cache at the time Kermit started; or the current username if a ticket
  1162.   cache did not exist.
  1163. Note: Kerberos 5 always attempts to retrieve a Ticket Granting Ticket (TGT)
  1164. using the preauthenticated TGT request.
  1165. AUTHORIZE K5 LIST-CREDENTIALS [ /ADDRESSES /ENCRYPTION /FLAGS ]
  1166.   Shows start time, expiration time, service or principal name, plus
  1167.   the following additional information depending the switches:
  1168. /ADDRESSES
  1169.   Displays the hostnames and/or IP addresses embedded within the
  1170.   tickets.
  1171. /ENCRYPTION displays the encryption used by each ticket (if applicable):
  1172.   DES-CBC-CRC
  1173.   DES-CBC-MD4
  1174.   DES-CBC-MD5
  1175.   DES3-CBC-SHA
  1176. /FLAGS provides the following information (if applicable) for each ticket:
  1177.   F - Ticket is Forwardable
  1178.   f - Ticket was Forwarded
  1179.   P - Ticket is Proxiable
  1180.   p - Ticket is a Proxy
  1181.   D - Ticket may be Postdated
  1182.   d - Ticket has been Postdated
  1183.   i - Ticket is Invalid
  1184.   R - Ticket is Renewable
  1185.   I - Ticket is the Initial Ticket
  1186.   H - Ticket has been authenticated by Hardware
  1187.   A - Ticket has been Pre-authenticated
  1188. 6.4. OTHER SECURITY-RELATED COMMANDS
  1189. SET TCP ADDRESS [ <ip-address> ]
  1190.   Specify the IP address of the computer that C-Kermit is running on.
  1191.   Normally this is not necessary.  The exceptions would be if the host is
  1192.   multihomed (e.g. one host pointed to by many IP addresses, or one of many
  1193.   hosts pointed to by a "common" IP address) or has multiple physical network
  1194.   adapters, with a different address for each adapter, AND you want C-Kermit
  1195.   to either (a) accept an incoming TCP connection ("set host *") or (b) get a
  1196.   Kerberos ticket.
  1197. SET TCP REVERSE-DNS-LOOKUP { ON, OFF }
  1198.   Specifies whether or not a Reverse DNS Lookup should be performed to
  1199.   determine the hostname assigned to the IP address used to connect to the
  1200.   host.
  1201.   In order for mutual authentication to succeed, the client and the server
  1202.   must agree on the name to be used for the server.  It is common for servers
  1203.   to have more than one name.  This is especially true for clusters of servers
  1204.   that provide the same function and are referenced by an alias.  For instance
  1205.   www.foo.com might be an alias for three machines www-1.foo.com,
  1206.   www-2.foo.com, and www-3.foo.com.  If the hosts are configured to use
  1207.   separate credentials for authentication it will be necessary to know which
  1208.   host is actually in use since "www.foo.com" is not equal to "www-1.foo.com".
  1209.   On the other hand, since DNS is not a secure service, using an additional
  1210.   lookup to verify the name associated with a particular IP address increases
  1211.   the susceptibility that the authentication may be forged by an attacker.
  1212.   For the highest level of security, Reverse DNS Lookups should be turned OFF.
  1213. 7. EFFECTS OF ENCRYPTION ON FILE TRANSFER PERFORMANCE
  1214. Encryption and the subsequent decryption of a data stream can result in 10%
  1215. to 60% reduction in file transfer performance depending on the encryption
  1216. algorithm.  Encrypted data streams are uncompressible, thus reducing
  1217. throughput on PPP connections.
  1218. 8. MULTI-HOMED HOSTS AND NETWORK ADDRESS TRANSLATORS
  1219. Kermit is designed to allow authentication with hosts whose names resolve to
  1220. multiple (randomized) IP addresses.
  1221. However, this does not always work on Windows 95 or Windows NT 3.5x due to
  1222. their caching of DNS information.  For instance, at Columbia University the
  1223. CUNIX name resolves to one of six machines, each with a different name, such
  1224. as HOSTA, HOSTB, etc.  When telneting to CUNIX, you might be given IP address
  1225. 128.59.35.136.  But even though the DNS servers are properly configured to
  1226. return the proper name (e.g. HOSTB) for that IP address, Windows 95 returns
  1227. CUNIX because it retrieves the information from its internal cache instead of
  1228. performing another network call.  This means that instead of retrieving a
  1229. ticket for the service:
  1230.   rcmd.hostb@CC.COLUMBIA.EDU
  1231. we get a ticket for:
  1232.   rcmd.cunix@CC.COLUMBIA.EDU
  1233. This use of the wrong ticket produces the following error: "Can't decode
  1234. authenticator (krb_rd_req)".
  1235. Kerberos 4 has no problems with NATs but fails with Multihomed systems.  Why?
  1236. A K4 ticket has room for only a single IP address and that IP address is
  1237. assigned not by the client but by the KDC.  The result is that when K4 is
  1238. used from behind a NAT the IP address that is placed into the ticket is the
  1239. IP address of the NAT, not the IP address of the client machine.  This means
  1240. the ticket is good only on the far side of the NAT and not on the near side.
  1241. It also means that when a K4 ticket is used with a multihomed host that the
  1242. ticket is good only on the interface that was used to acquire the ticket in
  1243. the first place.
  1244. Kerberos 5 has no problems with multihomed hosts because the ticket supports
  1245. multiple IP addresses and those IP addresses are inserted into the ticket by
  1246. the client, not by the KDC.  However, this also means that K5 fails when it
  1247. is used through a NAT.  The address in the ticket is the private IP address
  1248. and not the address that the KDC sees.  This can be worked around if the
  1249. client uses a kinit that allows a list of additional IP addresses to be
  1250. specified for inclusion in the TGT.  Kermit supports this capability with the
  1251.   AUTH K5 INIT /ADDRESSES:{list of addresses}
  1252. command.  The only problem is that in most cases the end user does not
  1253. know what the IP addresses is on the far side of the NAT.
  1254. 9. OTHER NOTES
  1255. In Kermit 95, the authentication type and encryption levels are displayed in
  1256. the terminal-screen status Line as follows:
  1257.   K4  - Kerberos IV
  1258.   K5  - Kerberos V
  1259.   NTLM- NT Lan Manager
  1260.   SRP - Secure Remote Password
  1261.   pp  - No encryption
  1262.   Ep  - Encryption to host, plaintext from host
  1263.   pD  - Plaintext to host, encryption from host
  1264.   ED  - Encryption both directions
  1265.   SSL - Secure Sockets Layer (both directions)
  1266.   TLS - Transport Layer Security (both directions)
  1267. Encrypted sessions become unreadable if even one bit of data is inserted into
  1268. or deleted from the data stream.  One damaged bit results in nine damaged
  1269. bytes but subsequent bytes remain readable.  But since TCP/IP is a reliable
  1270. transport by definition, none of this should occur.
  1271. Windows login names are not case-sensitive.  However, Unix login names are.
  1272. If the Unix login name is "fred" but Windows was logged in using the name
  1273. "Fred", authentication appears to succeed but telnetd closes the connection
  1274. after Telnet negotiations are complete.  There are several solutions to this
  1275. problem:
  1276.  . Make sure the Windows login name is case identical to the Unix login name.
  1277.    (If Windows has recorded the login in the registry as "Fred" it won't
  1278.    matter if you login to Windows using "fred".  The only way to correct
  1279.    this problem is to edit the Registry.)
  1280.  . Use the SET LOGIN USERID <name> command to set the proper login name
  1281.    before connecting to the telnet server.
  1282.  . Use the SET AUTHENTICATE { KERBEROS4, KERBEROS5 } PRINCIPAL <name> command
  1283.    to set the proper principal name before connecting to the telnet server.
  1284.  . Specify the remote username in the <principal> of your AUTHENTICATE Kxxx
  1285.    INITIALIZE command.
  1286. Kermit adjusts the case of the name if and only if a case insensitive
  1287. comparison of the SET LOGIN USERID name and the name in the authentication
  1288. ticket shows no differences.
  1289. 10. VARIABLES
  1290. 10.1 GENERAL AUTHENTICATION VARIABLES
  1291. v(authname)  - Only valid when Kermit is accepting a connection.  This
  1292.                 variable contains the name of the user that has been
  1293.                 authenticated as opposed to v(userid) which contains the
  1294.                 name the user chose to login as.  This distinction is
  1295.                 important for v(authstate) = "user" since this means that
  1296.                 although we were able to authenticate the user as v(authname)
  1297.                 we could not verify that she has authorization to access
  1298.                 the account of v(userid).
  1299. v(authstate) - String indicating current state of authentication:
  1300.                 "rejected" - Rejected or otherwise not authenticated
  1301.                 "unknown"  - Anonymous connection
  1302.                 "other"    - We know him, but not his name
  1303.                 "user"     - We know his name
  1304.                 "valid"    - We know him, and he needs no password
  1305. v(authtype) - String indicating which telnet (or other) authentication method
  1306.                is in use.
  1307.                "NULL"              - No authentication
  1308.                "KERBEROS_V4"       - Kerberos 4
  1309.                "KERBEROS_V5"       - Kerberos 5
  1310.                "SRP"               - Secure Remote Password
  1311.                "NTLM"              - NT Lan Manager
  1312.                "X_509_CERTIFICATE" - X.509 certificate
  1313. 10.2 KERBEROS VARIABLES
  1314. v(krb5cc)    - Current kerberos V credentials cache.
  1315. v(krb5princ) - Current kerberos V principal name.
  1316. v(krb5realm) - Current kerberos V realm name.
  1317. v(krb5errno) - Last Kerberos V errno
  1318. v(krb5errmsg)- Last Kerberos V error message
  1319. v(krb4princ) - Current kerberos IV principal name.
  1320. v(krb4realm) - Current kerberos IV realm name.
  1321. v(krb4errno) - Last Kerberos IV errno
  1322. v(krb4errmsg)- Last Kerberos IV error message
  1323. 10.3 SSL/TLS VARIABLES
  1324. v(x509_issuer)  - The issuer string from the peer's X.509 certificate
  1325. v(x509_subject) - The subject string from the peer's X.509 certificate
  1326. 11. FUNCTIONS
  1327. All Kerberos functions require the Kerberos version number, 4 or 5, as the
  1328. first argument (n).
  1329. fkrbtickets(n)
  1330.   The number of active Kerberos n (4 or 5) tickets.  This resets the
  1331.   ticket list used by fkrbnextticket(n).
  1332. fkrbnextticket(n)
  1333.   The next ticket in the Kerberos n (4 or 5) ticket list that was set up by
  1334.   the most recent invocation of fkrbtickets(n).
  1335. fkrbisvalid(n,name)
  1336.   The name is a ticket name, as returned by fkrbnextticket(n).  Returns
  1337.   1 if the ticket is valid, 0 if not valid.  A ticket is valid if all the
  1338.   following conditions are true:
  1339.     (i)   it exists in the current cache file;
  1340.     (ii)  it is not expired;
  1341.     (iii) it is not marked invalid (K5 only);
  1342.     (iv)  it was issued from the current IP address
  1343.   This value can be used in an IF statement, e.g.:
  1344.     if fkrbisvalid(4,krbtgt.FOO.BAR.EDU@FOO.BAR.EDU) ...
  1345. fkrbtimeleft(n,name)
  1346.   The name is a ticket name, as returned by fkrbnextticket(n).  Returns
  1347.   the number of seconds remaining in the ticket's lifetime.
  1348. fkrbflags(n,name)
  1349.   The name is a ticket name, as returned by fkrbnextticket(n).  Returns
  1350.   the flags string as reported with AUTH K5 LIST /FLAGS.  This string can
  1351.   be searched for a particular flag using the findex() function when
  1352.   SET CASE is ON (for case sensitive searches).  Flag strings are only
  1353.   available for K5 tickets.
  1354. Kerberos 5 functions operate against the current credential-cache file as set
  1355. by SET AUTHORIZATION K5 CREDENTIALS-FILE <filename>.
  1356. 12. SCRIPTING HINTS
  1357. 12.1.  Kerberos Autoget
  1358. When developing scripts to be used without user interaction you should turn
  1359. off the Kerberos AutoGet TGT feature with
  1360.   SET AUTHENTICATION KERBEROS4 AUTOGET OFF
  1361.   SET AUTHENTICATION KERBEROS5 AUTOGET OFF
  1362. When autoget mode is disabled, Kermit does not automatically perform the
  1363. function of KINIT. Instead this automation can be scripted; for example:
  1364.   SET TELOPT AUTHENTICATION REQUIRED
  1365.   SET HOST <host>:<port> /TELNET
  1366.   IF FAILURE {
  1367.       AUTHENTICATE K4 INIT ; (or K5)
  1368.       SET HOST <host>:<port>
  1369.       IF FAILURE { do whatever on failure }
  1370.   }
  1371. or place the following in your K95CUSTOM.INI file to insure a valid
  1372. Ticket Granting Ticket each time you start K95:
  1373.   IF AVAILABLE KERBEROS4 {
  1374.     IF NOT Fkrbisvalid(4,krbtgt.v(krb4realm)@v(krb4realm)) {
  1375.       echo Kerberos 4 Ticket Granting Ticket is invalid!
  1376.       AUTH K4 INIT
  1377.     }
  1378.   }
  1379.   IF AVAILABLE KERBEROS5 {
  1380.     IF NOT Fkrbisvalid(5,krbtgt/v(krb5realm)@v(krb5realm)) {
  1381.       echo Kerberos 5 Ticket Granting Ticket is invalid!
  1382.       AUTH K5 INIT
  1383.     }
  1384.   }
  1385. 12.2. Autodestruction of Kerberos Credentials
  1386. When Kermit is used on a machine in a public lab and Kerberos is used for
  1387. authentication it is often desireable to not have the Kerberos credentials
  1388. survive the current session.  To automate the destruction of Kerberos
  1389. credentials use:
  1390.    SET AUTH {K4, K5} AUTODESTROY { ON-CLOSE, ON-EXIT }
  1391. 12.3.  Automated prompting for usernames
  1392. To prevent Kermit from using the username reported by the local operating
  1393. system for the remote userid and kerberos principal use:
  1394.   SET LOGIN USERID {}
  1395.   SET AUTHENTICATION KERBEROS4 PRINCIPAL {}
  1396.   SET AUTHENTICATION KERBEROS5 PRINCIPAL {}
  1397. This forces Kermit to prompt the user for the userid and principal
  1398. when requesting credentials.
  1399. 12.4.  Password Inclusion in Script Files
  1400. Although it is not recommended (since storing passwords openly in a file,
  1401. especially on a PC, is a serious security risk), connections may be scripted
  1402. without user interaction:
  1403.   SET HOST /PASSWORD:<password> /USERID:<user> <host> <port> /TELNET
  1404. The security risk can be avoided if the script prompts for the password:
  1405.   ASKQ %p Password:
  1406.   SET HOST PASSWORD:%p /USERID:<user> <host> <port> /TELNET
  1407.   UNDEF %p
  1408. Of course, if the /PASSWORD switch is not specified Kermit prompts for the
  1409. password automatically when the host requests the use of authentication.
  1410. 12.5   Using Kermit Scripts to Produce Secure Telnet Services
  1411. The following series of commands causes a Kermit script to accept only
  1412. authenticated and encrypted connections:
  1413.   SET TELOPT /SERVER AUTH REQUIRE
  1414.   SET TELOPT /SERVER ENCRYPT REQUIRE REQUIRE
  1415.   SET HOST * <port> /TELNET
  1416.   IF FAILURE { do appropriate error handling }
  1417. The v(authstate) variable tells the script which level of authentication has
  1418. been achieved.  If the value is "valid" that means that the account specified
  1419. by v(userid) has been authenticated and authorized for use by v(authname).
  1420. If the value of v(authstate) is "user" then v(authname) has been
  1421. authenticated but she does not have known authorization to access the account
  1422. v(userid).  This usually means that some additional verification is needed.
  1423.   IF EQ "v(authstate)" "valid" {
  1424.     proceed without further authorization
  1425.   }
  1426.   IF EQ "v(authstate)" "user" {
  1427.     perform further authorization before providing service
  1428.   }
  1429. It is important to realize that when a Kermit script is used in this manner,
  1430. the Telnet negotiations provide authentication of the user and potentially
  1431. encryption of the data communication.  There is no facility in a Kermit script
  1432. to change the ownership of the currently running process from the user that
  1433. started it to the user ID of the authenticated user.  This means that the
  1434. script the authenticated user is accessing has all of the privileges of the
  1435. process executer and not the authenticated user.
  1436. Another important fact to remember is that secure access to an insecure
  1437. environment is not secure.  If you are using Windows 95 or 98 to run scripts,
  1438. while it is possible to use Kerberos or SRP to authenticate the incoming
  1439. clients, the insecure nature of the Windows environment means that it is
  1440. impossible for the Kerberos service key tables and SRP password databases to
  1441. be protected from tampering; the security in this case is no stronger than
  1442. than the security of Windows 9x.
  1443. 13. USING OTHER SECURITY METHODS WITH KERMIT
  1444. Other protocols can be used to create secure connections that are not
  1445. currently implemented in Kermit, such as Secure Shell (SSH).  The fact that
  1446. SSH is not integrated into Kermit software does not mean that Kermit cannot
  1447. be used in conjunction with it.  SSH provides for tunneling, which allows a
  1448. localhost proxy to be configured to take insecure connections on the local
  1449. machine and connect them via secure connections to remote hosts.
  1450. Secure connection clients can be used as the communication channel in C-Kermit
  1451. 7.0 and Kermit 95 1.1.16 via the PTY (Unix only) and PIPE commands.
  1452. See Section 2.7 of ckermit2.txt for details.
  1453. Firewalls based on access lists, proxies, and SOCKS do not provide secure
  1454. connections.  However, they do restrict the ports that may be used to
  1455. communicate between the Internet and the Intranet which makes it more
  1456. difficult for someone to break into the Intranet from outside.  They do not
  1457. protect the network from internal attacks nor do they protect a connection,
  1458. once made, from eavesdropping or hijacking.  They may be used in conjunction
  1459. with secure connection systems but should not be used as a replacement for
  1460. them.  (The Windows 95 and NT versions of Kermit 95 do not support SOCKS; the
  1461. OS/2 version has built-in support for SOCKS4.  C-Kermit can be built as a
  1462. SOCKS client if you have a SOCKS library; otherwise you can run SOCKSified
  1463. Telnet or Rlogin clients through C-Kermit with the PIPE command.)
  1464. NEC distributes a SOCKS5 Winsock shim for Windows 9x/NT at
  1465.   ftp://ftp.nec.co.jp/pub/packages/sotools/
  1466. 13.1  Implementing Other Security Methods for Kermit 95
  1467. Kermit 95 provides an interface that allows it to use a DLL to provide an
  1468. alternative mechanism for implementing secure communication methods.  The DLL
  1469. is loaded via a network type command:
  1470.   SET NETWORK TYPE DLL <dll-file>
  1471. The connection is then made with a SET HOST command
  1472.   SET HOST <command line>
  1473. where the <command line> is passed to the DLL after the normal Kermit quoting
  1474. rules are applied.
  1475. /* Kermit 95 - External Network DLL specification
  1476.  * July 16 1998
  1477.  * Jeffrey Altman <jaltman@columbia.edu>
  1478.  *
  1479.  * The following specification defines a set of functions to be exported from
  1480.  * a DLL in order for the DLL to work with Kermit 95 version 1.1.17 or higher.
  1481.  *
  1482.  * The DLL is loaded by Kermit 95 via use of the command:
  1483.  *   SET NETWORK TYPE DLL <dllname>
  1484.  *
  1485.  * Notes:
  1486.  *   The functions specified here must be thread safe.  It is possible
  1487.  *   for multiple threads to be calling any combination of functions
  1488.  *   simultaneously.
  1489.  *
  1490.  *   The 1.1.17 interface does not provide for the ability of the
  1491.  *   DLL to query the user with echoing input, nor is the a method
  1492.  *   for querying the values of Kermit variables such as 'userid'
  1493.  *   or Kermit version number.  This will be added in a later release.
  1494.  */
  1495. /*
  1496.  * N E T O P E N - Network Open
  1497.  *
  1498.  * The network open function is called by Kermit 95 when a new connection
  1499.  * is desired.  Usually in response to:
  1500.  *    SET HOST <command_line>
  1501.  *
  1502.  * Parameters:
  1503.  *   command_line - the command line specified in the SET HOST command
  1504.  *                  after quoting rules and variables have been applied.
  1505.  *   termtype     - a string representing either the currently selected
  1506.  *                  terminal type or a user specified string as per
  1507.  *                  SET TELNET TERMINAL <string>
  1508.  *   height       - initial height of the terminal window (chars)
  1509.  *   width        - initial width of the terminal window (chars)
  1510.  *   readpass     - a pointer to a function to be used to read a password
  1511.  *                  without echoing
  1512.  *
  1513.  * Return values:
  1514.  *   0   on success
  1515.  *   < 0 on failure
  1516.  *
  1517.  *   return codes should be defined such that they can be passed to
  1518.  *   errorstr() to retrieve an appropriate error message for the user.
  1519.  */
  1520. int
  1521. netopen(char * command_line, char * termtype, int height, int width,
  1522.         int (* readpass)(char * prompt,char * buffer, int length));
  1523. /*
  1524.  * N E T C L O S - Network Close
  1525.  *
  1526.  * The network close function is called by Kermit 95 when the user requests
  1527.  * a disconnect or in response to fatal error.
  1528.  *
  1529.  * Parameters: None
  1530.  *
  1531.  * Return values:
  1532.  *   0   on success
  1533.  *   < 0 on failure
  1534.  *
  1535.  *   return codes should be defined such that they can be passed to
  1536.  *   errorstr() to retrieve an appropriate error message for the user.
  1537.  */
  1538. int
  1539. netclos(void) ;
  1540. /*
  1541.  * N E T T C H K - Network Terminal I/O Check
  1542.  *
  1543.  * The network terminal i/o check function is called regularly by Kermit 95
  1544.  * to poll the status of the connection and to retrieve the number of input
  1545.  * characters waiting to be processed.  Because it is called frequently this
  1546.  * function should be designed to be low cost.
  1547.  *
  1548.  * Parameters: None
  1549.  *
  1550.  * Return values:
  1551.  *   >= 0 number of characters waiting in the input queue
  1552.  *   < 0  indicates a fatal error on the connection and the connection
  1553.  *        should be closed.
  1554.  *
  1555.  *   return codes should be defined such that they can be passed to
  1556.  *   errorstr() to retrieve an appropriate error message for the user.
  1557.  */
  1558. int
  1559. nettchk(void);
  1560. /*
  1561.  * N E T F L U I - Network Flush Input
  1562.  *
  1563.  * The network flush input function should clear the connection's input
  1564.  * queue.
  1565.  *
  1566.  * Parameters: None
  1567.  *
  1568.  * Return values:
  1569.  *   0    indicates success
  1570.  *   < 0  indicates an error
  1571.  *
  1572.  *   return codes should be defined such that they can be passed to
  1573.  *   errorstr() to retrieve an appropriate error message for the user.
  1574.  */
  1575. int
  1576. netflui(void);
  1577. /*
  1578.  * N E T B R E A K - Network Break
  1579.  *
  1580.  * The network break signal is called in response to a user initiated
  1581.  * break command.  For example, on a serial device this should result in
  1582.  * a Break signal and on a Telnet connection a Break Command is sent.
  1583.  * For connection types without an equivalent simply return 0.
  1584.  *
  1585.  * Parameters: None
  1586.  *
  1587.  * Return values:
  1588.  *   0    indicates success
  1589.  *   < 0  indicates an error
  1590.  *
  1591.  *   return codes should be defined such that they can be passed to
  1592.  *   errorstr() to retrieve an appropriate error message for the user.
  1593.  */
  1594. int
  1595. netbreak(void);
  1596. /*
  1597.  * N E T I N C - Network Input Character
  1598.  *
  1599.  * The network input character is used to read the next character from
  1600.  * the input queue.
  1601.  *
  1602.  * Parameters:
  1603.  *   timeout - 0   indicates no timeout, block until the next character
  1604.  *                 is available;
  1605.  *             > 0 indicates a timeout value in seconds;
  1606.  *             < 0 indicates a timeout value in milliseconds;
  1607.  *
  1608.  * Return values:
  1609.  *   >= 0 is interpreted as a valid character
  1610.  *   -1   is a timeout [errorstr() is not called]
  1611.  *   < -1 is a fatal error
  1612.  *
  1613.  *   return codes < -1 should be defined such that they can be passed to
  1614.  *   errorstr() to retrieve an appropriate error message for the user.
  1615.  */
  1616. int
  1617. netinc(int timeout);
  1618. /*
  1619.  * N E T X I N - Network Extended Input
  1620.  *
  1621.  * The network extended input is called to read a large number of waiting
  1622.  * input characters.  It will never be called with a number larger than
  1623.  * reported as available and waiting by nettchk().  The function may return
  1624.  * fewer characters than is requested.  This function should not block.
  1625.  *
  1626.  * Parameters:
  1627.  *   count  - number of characters to be read
  1628.  *   buffer - buffer of length count to be used to store the data
  1629.  *
  1630.  * Return values:
  1631.  *   >= 0  the number of characters actually returned by the function
  1632.  *   < 0  indicates an error
  1633.  *
  1634.  *   return codes should be defined such that they can be passed to
  1635.  *   errorstr() to retrieve an appropriate error message for the user.
  1636.  */
  1637. int
  1638. netxin(int count, char * buffer);
  1639. /*
  1640.  * N E T T O C - Network Terminal Output Character
  1641.  *
  1642.  * The network terminal output character transmits a single character
  1643.  *
  1644.  * Parameters:
  1645.  *   c - a single character to be output
  1646.  *
  1647.  * Return values:
  1648.  *   0    indicates success
  1649.  *   < 0  indicates an error
  1650.  *
  1651.  *   return codes should be defined such that they can be passed to
  1652.  *   errorstr() to retrieve an appropriate error message for the user.
  1653.  */
  1654. int
  1655. nettoc(int c);
  1656. /*
  1657.  * N E T T O L - Network Terminal Output Line
  1658.  *
  1659.  * The network terminal output line is used to output one or more
  1660.  * characters.
  1661.  *
  1662.  * Parameters:
  1663.  *   buffer - contains the characters to be output
  1664.  *   count  - the number of characters to be output from buffer
  1665.  *
  1666.  * Return values:
  1667.  *   >= 0 the number of characters actually output.  The function
  1668.  *        should make its best attempt to transmit all 'count'
  1669.  *        characters.
  1670.  *   < 0  indicates a fatal error
  1671.  *
  1672.  *   return codes should be defined such that they can be passed to
  1673.  *   errorstr() to retrieve an appropriate error message for the user.
  1674.  */
  1675. int
  1676. nettol(char * buffer, int count);
  1677. /*
  1678.  * T T V T - Terminal to Virtual Terminal Mode
  1679.  *
  1680.  * Terminal to Virtual Terminal Mode is called to notify the DLL that
  1681.  * Kermit 95 is about to enter terminal mode communications.  This means
  1682.  * either the CONNECT or DIAL commands will be sending output.  In most
  1683.  * cases, this will be either printable text or escape sequences.
  1684.  *
  1685.  * Parameters: None
  1686.  *
  1687.  * Return values:
  1688.  *   0    indicates success
  1689.  *   < 0  indicates an error
  1690.  *
  1691.  *   return codes should be defined such that they can be passed to
  1692.  *   errorstr() to retrieve an appropriate error message for the user.
  1693.  */
  1694. int
  1695. ttvt(void);
  1696. /*
  1697.  * T T P K T - Terminal to Packet Mode
  1698.  *
  1699.  * Terminal to Packet Mode is called to notify the DLL that
  1700.  * Kermit 95 is about to enter file transfer operations.
  1701.  *
  1702.  * Parameters: None
  1703.  *
  1704.  * Return values:
  1705.  *   0    indicates success
  1706.  *   < 0  indicates an error
  1707.  *
  1708.  *   return codes should be defined such that they can be passed to
  1709.  *   errorstr() to retrieve an appropriate error message for the user.
  1710.  */
  1711. int
  1712. ttpkt(void);
  1713. /*
  1714.  * T T R E S - Terminal Restore Mode
  1715.  *
  1716.  * Terminal Restore Mode is called to notify the DLL that it should
  1717.  * Kermit 95 restore to default settings.
  1718.  *
  1719.  * Parameters: None
  1720.  *
  1721.  * Return values:
  1722.  *   0    indicates success
  1723.  *   < 0  indicates an error
  1724.  *
  1725.  *   return codes should be defined such that they can be passed to
  1726.  *   errorstr() to retrieve an appropriate error message for the user.
  1727.  */
  1728. int
  1729. ttres(void);
  1730. /*
  1731.  * T E R M I N F O - Terminal Information
  1732.  *
  1733.  * The terminal information function is called whenever the terminal
  1734.  * type or window size is changed.
  1735.  *
  1736.  * Parameters:
  1737.  *   termtype     - a string representing either the currently selected
  1738.  *                  terminal type or a user specified string as per
  1739.  *                  SET TELNET TERMINAL <string>
  1740.  *   height       - initial height of the terminal window (chars)
  1741.  *   width        - initial width of the terminal window (chars)
  1742.  *
  1743.  * Return values: None
  1744.  */
  1745. void
  1746. terminfo(char * termtype, int height, int width);
  1747. /*
  1748.  * V E R S I O N - Version String
  1749.  *
  1750.  * Version is called to get a user displayable version string for use
  1751.  * as part of the SHOW NETWORK command.
  1752.  *
  1753.  * Parameters: None
  1754.  *
  1755.  * Return values:
  1756.  *   a string which will not be deleted by the caller.
  1757.  */
  1758. const char *
  1759. version(void);
  1760. /*
  1761.  * E R R O R S T R - Error String
  1762.  *
  1763.  * Error string is called to retrieve a user displayable error message
  1764.  * describing the type of error being reported by the function.
  1765.  *
  1766.  * Parameters:
  1767.  *   error - the error value reported by the DLL function.
  1768.  *
  1769.  * Return values:
  1770.  *   a string which will not be deleted by the caller.
  1771.  */
  1772. const char *
  1773. errorstr(int error);
  1774. 14. AN INTRODUCTION TO CERTIFICATES AND CERTIFICATE AUTHORITIES WITH OPENSSL
  1775. This is a brief introduction to certificates, certificate authorities and how
  1776. to use them.  RSA Security, Inc., has a very good Frequently Asked Questions
  1777. list:
  1778.   http://www.rsasecurity.com/rsalabs/faq/questions.html
  1779. The FAQ covers many topics related to cryptography as well as how public key
  1780. certificates work and how they are to be used.
  1781. 14.1  What Are Certificates, Private Keys, CSRs, CAs, and CRLs?
  1782. Public key (asymetric) cryptography defines a class of algorithms for key
  1783. exchange that include RSA and Diffie-Hellman (DH).  These algorithms provide a
  1784. mechanism to create a shared secret that can be used for encrypting future
  1785. communications.  Anyone listening to the exchange would be no closer to
  1786. figuring out the value of the shared secret than if they were to take a guess.
  1787. There are two parts to the exchange.  A private key that is never disclosed,
  1788. and a public key that may be viewed by all.  A X.509 certificate is a standard
  1789. package for distributing a public key with identifying features such that the
  1790. authenticity and validity of the public key may be verified by a recipient.
  1791. The authenticity and validity of a certificate is provided by a combination of
  1792. information provided within the certificates (the subject, the issuer, dates
  1793. of validity, ...) as well as the trust that is placed in the certificate
  1794. issuer (the Certificate Authority, or CA).  The CA signs each of the
  1795. certificates that it issues with its own certificate.  With a copy of the CA's
  1796. certificate it is possible to validate all of the certificates that were
  1797. signed by the CA's private key.
  1798. A user who wants to have a certificate signed by a CA creates a Certificate
  1799. Signing Request (CSR).  The CSR is an unsigned certificate which is presented
  1800. to the CA along with information verifying the identity and desired use for
  1801. the certificate.  The CA signs the CSR producing a certificate that is valid
  1802. for a specific time frame which is then returned to the user.
  1803. If the private key of the certificate were to be compromised the CA may revoke
  1804. the certificate.  The CA publishes a Certificate Revocation List (CRL) on a
  1805. periodic basis containing a list of all certificates that would otherwise be
  1806. valid if they were not revoked.  It is the responsibility of the verifier to
  1807. check not only the authenticity of the certificate but also whether or not it
  1808. has been revoked by the issuer.
  1809. 14.2  RSA certificates vs. DSA Certificates
  1810. The important differences between RSA and DSA certificates are:
  1811.  . The RSA algorithms are faster than DSA.
  1812.  . The RSA algorithms are supported by all the major browsers whereas DSA
  1813.     are not.
  1814.  . The RSA algorithms are patented in the United States (until Sept 29, 2000)
  1815.    which requires payments of licensing fees for producers of software
  1816.    utilizing them, whereas DSA is free.
  1817.  . The RSA private and public key pairs may be used for encrypting data as
  1818.    well as signing.  DSA private and public key pairs may only be used for
  1819.    signing.  Therefore, products incorporating DSA algorithms are easier to
  1820.    export from the United States.
  1821. Due to the patent issues surrounding the RSA algorithms, the Kermit Project
  1822. does not maintain a library or distribute any binaries that are built with the
  1823. RSA algorithms.  This policy can change when the RSA patent expires.
  1824. 14.3  Should You Be Your Own Certificate Authority?
  1825. There are many companies that believe that providing CA services is big
  1826. business.  These include but are not limited to:
  1827.    Verisign <http://www.verisign.com>
  1828.    Thawte Consulting <http://www.thawte.com>
  1829.    CertiSign Cerificadora Digital Ltda. <http://www.certisign.com.br>
  1830.    IKS CmbH <http://www.iks-jena.de>
  1831.    Uptime Commerce Ltd. <http://www.uptimecommerce.com>
  1832.    BelSign NV/SA <http://www.belsign.be>
  1833. The root CA certificates of these companies certificates are included most of
  1834. the popular browsers.  This provides an ease-of-use advantage to the
  1835. recipients of certificates they sign since the root certificates do not need
  1836. to be otherwise distributed in order to authenticate the signed certificates.
  1837. On the other hand, as is pointed out by C. Ellison and B. Schneier in their
  1838. paper, "Ten Risks of PKI: What You're Not Being Told About Public Key
  1839. Infrastructure" <http://www.counterpane.com/pki-risks.html>, using the
  1840. commercial CA services it makes it difficult to decide whether or not a
  1841. certificate should be trusted for a particular purpose, especially if you want
  1842. to use certificates to authenticate an end user to a system for remote access.
  1843. In this situation it is necessary to not only be able to authenticate a
  1844. certificate but be able to know that the information within the certificate,
  1845. such as the uniqueIdentifier used for the User ID, is tightly controlled and
  1846. in fact unique in your environment.
  1847. If you choose to be your own CA you will need to configure your environment.
  1848. Create the following directory trees to store the DSA and RSA CAs.
  1849.    openssl/dsaCA/certs/
  1850.    openssl/dsaCA/crl/
  1851.    openssl/dsaCA/private/
  1852.    openssl/dsaCA/newcerts/
  1853.    openssl/dsaCA/requests/
  1854.    openssl/rsaCA/certs/
  1855.    openssl/rsaCA/crl/
  1856.    openssl/rsaCA/private/
  1857.    openssl/rsaCA/newcerts/
  1858.    openssl/rsaCA/requests/
  1859. Place the openssl.cnf file into the openssl directory.  Edit it to meet the
  1860. requirements of your organization.    Create two sections [ CA_DSA ] and
  1861. [ CA_RSA ]:
  1862.   [ CA_DSA ]
  1863.   dir             = <openssl_path>/dsaCA/  # Where everything is kept
  1864.   certs           = $dir/certs             # Where the issued certs are kept
  1865.   crl_dir         = $dir/crl               # Where the issued crl are kept
  1866.   database        = $dir/index.txt         # database index file.
  1867.   new_certs_dir   = $dir/newcerts          # default place for new certs.
  1868.   certificate     = $dir/certs/cacert.pem  # The CA certificate
  1869.   serial          = $dir/ca.srl            # The current serial number
  1870.   crl             = $dir/crl.pem           # The current CRL
  1871.   private_key     = $dir/private/cakey.pem # The private key
  1872.   RANDFILE        = $dir/private/.rand     # private random number file
  1873.   x509_extensions = x509v3_extensions      # The extentions to add to the cert
  1874.   default_days    = 365                    # how long to certify for
  1875.   default_crl_days= 30                     # how long before next CRL
  1876.   default_md      = sha1                   # which md to use.
  1877.   preserve        = no                     # keep passed DN ordering
  1878.   [ CA_RSA ]
  1879.   dir             = <openssl_path>/rsaCA/  # Where everything is kept
  1880.   certs           = $dir/certs             # Where the issued certs are kept
  1881.   crl_dir         = $dir/crl               # Where the issued crl are kept
  1882.   database        = $dir/index.txt         # database index file.
  1883.   new_certs_dir   = $dir/newcerts          # default place for new certs.
  1884.   certificate     = $dir/certs/cacert.pem  # The CA certificate
  1885.   serial          = $dir/ca.srl            # The current serial number
  1886.   crl             = $dir/crl.pem           # The current CRL
  1887.   private_key     = $dir/private/cakey.pem # The private key
  1888.   RANDFILE        = $dir/private/.rand     # private random number file
  1889.   x509_extensions = x509v3_extensions      # The extentions to add to the cert
  1890.   default_days    = 365                    # how long to certify for
  1891.   default_crl_days= 30                     # how long before next CRL
  1892.   default_md      = sha1                   # which md to use.
  1893.   preserve        = no                     # keep passed DN ordering
  1894. If you wish to use the uniqueIdentifier field to perform certificate to user
  1895. ID mapping, add it after the emailAddress field.
  1896. To avoid the need to specify the location of the openssl.cnf file, set the
  1897. environment variable OPENSSL_CNF to be equal to the full path of the file.
  1898. If you do not create this environment variable you will need to include the
  1899. option:
  1900.   -config <path>/openssl.cnf
  1901. to each openssl command.
  1902. Create the file that stores the next available serial number for each CA:
  1903.    openssl/dsaCA/ca.srl
  1904.    openssl/rsaCA/ca.srl
  1905. The format of this file is a hex value followed by a LF (0x0A) character.
  1906. The value "01" is an appropriate initial value.
  1907. Create an empty file to store the index of signed certificates:
  1908.    openssl/dsaCA/index.txt
  1909.    openssl/rsaCA/index.txt
  1910. Now you are ready to create the DSA and RSA CA certificates for your
  1911. organization.
  1912. 14.4  Generating a DSA CA (self-signed) Certificate
  1913. Change the current working directory to openssl/dsaCA/.
  1914. Generate the DSA parameters to be used when generating the keys for use with
  1915. your certificates.
  1916.   openssl dsaparam 1024 -out dsa1024.pem
  1917. Generate the self-signed certificate you will use as the CA certificate for
  1918. your organization.
  1919.   openssl req -x509 -newkey dsa:dsa1024.pem -days <days> 
  1920.     -keyout private/cakey.pem -out certs/cacert.pem
  1921. The <days> parameter should be replaced by the number of days you want this
  1922. certificate to remain valid.  All certificates signed by this certificate
  1923. become invalid when this certificate expires.
  1924. Be sure to not forget the pass-phrase you use to protect the private key of
  1925. the CA certificate.  If you do not wish to encrypt the CA's private key you
  1926. may specify the -nodes option.  But this is highly discouraged.
  1927. You can check the contents of the CA certificate with the command:
  1928.   openssl x509 -text -in certs/cacert.pem
  1929. 14.5  Generating a DSA CSR
  1930. Change the current working directory to openssl/dsaCA/.
  1931. If you have not already created a set of DSA parameters, you must generate a
  1932. set:
  1933.   openssl dsaparam 1024 -out dsa1024.pem
  1934. It is safe to reuse the DSA parameters.
  1935. Generate the DSA certificate request
  1936.   openssl req -newkey dsa:dsa1024.pem -keyout private/<name>-key.pem 
  1937.     -out requests/<name>-req.pem
  1938. <name> should be replaced by something that identifies the files.  Perhaps
  1939. the hostname or userid for which the certificate is being generated.
  1940. If you are generating a CSR for use as a host certificate, be sure to specify
  1941. the fully qualified domain name as reported by the DNS as the Common Name for
  1942. the certificate.  Otherwise, it will not be recognized as belonging to the
  1943. host it is installed on by its clients.
  1944. Be sure not to forget the pass-phrase you use to protect the private key of
  1945. the CA certificate.  The certificate (after signing) is unusable without it.
  1946. Use the -nodes option if you wish to store the key unencrypted.
  1947. You can check the contents of the CSR with the command:
  1948.   openssl req -text -in requests/<name>-req.pem
  1949. The CSR now stored in requests/<name>-req.pem may be sent to one of the
  1950. commerical CAs if you do not wish to be your own CA.
  1951. 14.6  Generating a RSA CA (self-signed) certificate
  1952. Change the current working directory to openssl/rsaCA/.
  1953. Generate the self-signed certificate you will use as the CA certificate for
  1954. your organization.
  1955.   openssl req -x509 -newkey rsa:1024 -days <days> 
  1956.     -keyout private/cakey.pem -out certs/cacert.pem
  1957. The <days> parameter should be replaced by the number of days you want this
  1958. certificate to remain valid.  All certificates signed by this certificate
  1959. become invalid when this certificate expires.
  1960. Be sure not to forget the pass-phrase you use to protect the private key of
  1961. the CA certificate.  If you do not wish to encrypt the CA's private key you
  1962. may specify the -nodes option.  But this is highly discouraged.
  1963. You can check the contents of the CA certificate with the command:
  1964.   openssl x509 -text -in certs/cacert.pem
  1965. 14.7  Generating a RSA CSR
  1966. Change the current working directory to openssl/rsaCA/.
  1967.   openssl req -newkey rsa:1024 -keyout private/<name>-key.pem 
  1968.     -out requests/<name>-req.pem
  1969. <name> should be replaced by something that identifies the files.  Perhaps
  1970. the hostname or userid for which the certificate is being generated.
  1971. If you are generating a CSR for use as a host certificate be sure to specify
  1972. the fully qualified domain name as reported by the DNS as the Common Name for
  1973. the certificate.  Otherwise, it is not recognized as belonging to the host it
  1974. is installed on by its clients.
  1975. Be sure not to forget the pass-phrase you use to protect the private key of
  1976. the CA certificate.  The certificate (after signing) is unusable without it.
  1977. Use the -nodes option if you wish to store the key unencrypted.
  1978. You can check the contents of the CSR with the command:
  1979.   openssl req -text -in requests/<name>-req.pem
  1980. The CSR now stored in requests/<name>-req.pem may be sent to one of the
  1981. commerical CAs if you do not wish to be your own CA.
  1982. 14.8  Signing a CSR with your CA certificate
  1983. If you are signing a DSA certificate change directory to openssl/dsaCA/ and
  1984. use a <caname> of "CA_DSA".  If you are signing a RSA certificate change
  1985. directory to openssl/rsaCA/ and use a <caname> of "CA_RSA".
  1986.   openssl ca -name <caname> -in requests/<name>-req.pem 
  1987.     -out certs/<name>.pem -days <days>
  1988. The <days> parameter should be replaced by the number of days you want the
  1989. signed certificate to remain valid.  If you want to specify a specific date
  1990. range you can replace the -days parameters with:
  1991.  -startdate YYMMDDHHMMSSZ  - certificate validity notBefore
  1992.  -enddate YYMMDDHHMMSSZ    - certificate validity notAfter
  1993. The file certs/<name>.pem now contains a signed certificate that may be used
  1994. by a host or client for authentication in conjunction with its matching
  1995. private key (private/<name>-key.pem.)
  1996. An alternative method of signing the CSR is to use the command:
  1997.   openssl x509 -req -in requests/<name>-req.pem -CA certs/cacert.pem 
  1998.     -CAkey private/cakey.pem -out certs/<name>.pem -days <days> 
  1999.     -CAserial ca.srl -CAcreateserial
  2000. The "openssl x509" command provides greater functionality at the expense of
  2001. ease of use.  The X509 may be used to assign X.509v3 certificate extensions
  2002. with the -extfile and -extensions switches.  It may also be used to produce
  2003. certificates that may only be used for specific purposes.
  2004. You can check the contents of the CA certificate with the command:
  2005.   openssl x509 -text -in certs/<name>.pem
  2006. 14.9  Revoking a Certificate
  2007. If you are revoking a DSA certificate change directory to openssl/dsaCA/ and
  2008. use a <caname> of "CA_DSA".  If you are revoking a RSA certificate change
  2009. directory to openssl/rsaCA/ and use a <caname> of "CA_RSA".
  2010.   openssl ca -name <caname> -revoke -in certs/<name>.pem
  2011. marks the certificate as being revoked in the index.txt file.  It is
  2012. necessary to revoke a certificate with a given subject name if you wish to
  2013. generate a new certificate with an identical subject name.  Once a
  2014. certificate is revoked it is listed in the next generated CRL.
  2015. 14.10  Generating a CRL
  2016. If you are generating a CRL for your DSA certificates change directory to
  2017. openssl/dsaCA/ and use a <caname> of "CA_DSA".  If you are generating a CRL
  2018. for your RSA certificate change directory to openssl/rsaCA/ and use a <caname>
  2019. of "CA_RSA".
  2020.   openssl ca -name <caname> -gencrl -out crl/<date>-crl.pem
  2021. <date> should be replaced by the date the crl was generated.
  2022. You can check the contents of the CRL with the command
  2023.   openssl crl -in crl/<date>-crl.pem -text
  2024. The current CRL should be placed somewhere it is publicly and easily
  2025. accessible.  For instance, by HTTP or FTP.  The CRL is signed by the CA
  2026. certificate
  2027. (End)