トランスポート・レイヤー・セキュリティー

TN3270E Telnet サーバー (Telnet) には、トランスポート・レイヤー・セキュリティー (TLS) またはセキュア・ソケット・レイヤー (SSL) プロトコルを使用して、Telnet 接続を保護する機能があります。Telnet は、TLSv1.1、 TLSv1.0、SSLv3、および SSLv2 プロトコルをサポートします。これらのプロトコルはまとめて TLS プロトコルと呼ばれます。RACF® に言及している 部分は、必要なサポートを含む任意の SAF 準拠セキュリティー製品に当てはまります。Telnet は、TCP/IP で Application Transparent Transport Layer Security (AT-TLS) を使用するようにセットアップすることができます。または、AT-TLS で使用可能な機能の一部を Telnet プロファイルで構成することができます。AT-TLS セキュリティー構成を使用するポートは、TTLSPORT ポートと呼ばれ、Telnet プロファイル・セキュリティー構成を使用するポートは、SECUREPORT ポートと呼ばれます。セキュア・ポートは、TTLSPORT ポートか SECUREPORT ポートのどちらかです。基本ポートは、TLS プロトコルを使用しないポートです。 接続はセキュアと基本のどちらかです。Telnet と VTAM® の間の流れは変更されません。

期限切れの Internet Engineering Task Force (IETF)「TLS-based Telnet security」ドラフトが Telnet でサポートされています。このドラフトでは、Telnet ネゴシエーションは、セキュア・ハンドシェークを開始する前に、クライアントで TLS プロトコルが必要またはサポートされているかどうかを判別することができます。セキュア・ポートに対して Telnet が取るデフォルトのアクションは、TLS ハンドシェークを最初に試みることです。クライアントが、指定されたハンドシェーク・タイムアウト時間内にハンドシェークを開始しない場合、期限切れの「TLS-based Telnet Security」ドラフトで定義されているとおりに、TLS のネゴシエーションが試みられます。クライアントがセキュア接続が必要であると応答すると、ハンドシェークが開始されます。クライアントが TLS ネゴシエーション要求をリジェクトすると、接続はクローズされます。 このように、インストール・システムは、クライアントが使用しているプロトコルを知らないまま、両方のタイプのセキュア・クライアントをサポートすることができます。デフォルトのアクションを変更するには、CONNTYPE ステートメントを指定します。このステートメントについては、このトピックの後半で説明します。CONNTYPE ステートメントを使用すると、同一ポートでセキュア接続と基本接続をサポートすることもできます。

Telnet サーバー認証およびクライアント認証の説明は、TLS/SSL セキュリティーにあります。Telnet サーバーは、レベル 1、レベル 2、およびレベル 3 のクライアント認証をサポートします。クライアント認証は CLIENTAUTH パラメーターによって行われます。レベル 2 およびレベル 3 のクライアント認証は、RACF サービスを使用してクライアント証明書を関連ユーザー ID に変換します。そのユーザー ID をクライアント ID として使用できます。

TTLSPORT が使用する AT-TLS は、Telnet プロファイル構成でサポートされない複数のシステム SSL 機能をサポートします。例えば、以下の機能は、AT-TLS によってサポートされますが、Telnet プロファイル構成ではサポートされません。

SECUREPORT ポートを使用する場合、Telnet プロファイル・セキュリティー構成は、システム SSL 機能の以下のサブセットをサポートします。

TTLSPORT ポートと SECUREPORT ポートは、同じ Telnet サーバー内に共存できます。

AT-TLS は、Telnet プロファイル構成と比較すると、1 つの制約があります。 AT-TLS ポリシーは、クライアントのホスト名に基づくセキュリティー・パラメーターと接続とのマッピングをサポートしません。 これを行うには、Telnet プロファイル構成を使用します。つまり、PARMSGROUP ステートメントでセキュリティー・パラメーター・ステートメントをコーディングし、PARMSMAP ステートメントを使用して、グループをホスト名またはホスト名グループにマップします。 現在この構成がある場合は、引き続き Telnet プロファイル構成を使用する必要があります。

Telnet トランスポート・レイヤー・セキュリティーのセットアップ

TELNETPARMS ブロック内の TTLSPORT ステートメントまたは SECUREPORT ステートメントは、AT-TLS または Telnet プロファイル・ステートメントを使用してセキュア接続を構成するセキュア・ポートとしてポートを定義するのに必要です。

CONNTYPE ステートメントはセキュア・ポート上のオプション・ステートメントであり、接続がセキュアであるかどうかにかかわらず、および接続が使用可能であるかどうかにかかわらず、接続が TLS ハンドシェークを開始する方法に対する制御を強化します。 有効な CONNTYPE ステートメント・オプションは次のとおりです。

CONNTYPE ステートメントが無指定の場合は、デフォルトにより、セキュア・ポートは CONNTYPE SECURE、基本ポートは CONNTYPE BASIC になります。

基本接続とセキュア接続の両方に 1 つのポートを使用

CONNTYPE ステートメントを使用して、単一ポートで接続タイプを変更することができます。ポートが基本接続およびセキュア接続の両方をサポートできるようにするには、以下のいずれかのステートメントが当てはまることを前提とします。

最初のケースでは、CONNTYPE ANY を指定します。ポートがセキュア・ポートとして定義されているにもかかわらず、クライアントが基本接続を望む場合、接続ネゴシエーションが開始するまでに多少の遅延が生じます。この理由は、CONNTYPE ANY をコーディングすると、Telnet は最初に TLS ハンドシェークを試みて、クライアントが TLS サポートを要求していないことを確認するためです。基本接続のネゴシエーションが開始するのは、ハンドシェークがタイムアウトになり、ネゴシエーション・セキュリティーがリジェクトされた後になります。

2 番目のケースでは、TELNETPARMS ブロックにデフォルト接続セキュリティー・タイプを指定する必要があります (CONNTYPE ステートメントを参照)。異なる接続セキュリティー要件を持つ接続の場合:

AT-TLS を使用した Telnet セキュリティーの構成

TELNETPARMS ブロック内の TTLSPORT ステートメントは、ポートが AT-TLS を使用してシステム SSL を管理することを示します。すべての TTLSPORT ポートは、ポートごとに TELNETPARMS ブロックを指定して定義する必要があります。

CONNTYPE ステートメントを除いて、すべてのセキュリティー構成は AT-TLS ポリシーで行われます。AT-TLS セットアップについて詳しくは、Application Transparent Transport Layer Security のデータ保護を参照してください。 ポリシー・エージェントのセットアップおよび AT-TLS ポリシー・ステートメントについては、「z/OS Communications Server: IP 構成解説書」を参照してください。AT-TLS ポリシーに対して実行するタスクのリスト例には、次のものがあります。

  1. TCP/IP スタック・プロファイルに、TTLS パラメーターを指定した TCPCONFIG ステートメントが含まれていることを確認する。
  2. SERVAUTH クラスの RACF リソース EZB.INITSTACK.sysname.tcpname に対して、ポリシー・エージェントおよびその他の必要な管理アプリケーションを許可する。
  3. ポリシー・エージェント JCL の STDENV DD ステートメントで pagent 環境ファイルを定義する。以下に例を示します。
    //STDENV   DD PATH='/etc/pagent/pagent.env',PATHOPTS=(ORDONLY)
  4. pagent 環境ファイルで、構成ファイルを指し示す。以下に例を示します。
    PAGENT_CONFIG_FILE=//'SYS1.TCPPARMS(PAGENT)'
  5. 構成ファイルで、TCP/IP スタック・イメージごとにポリシー・ファイルをセットアップする。 以下に例を示します。
    TcpImage TCP1 /etc/pagent/TCP1.policy FLUSH
    TcpImage TCP2 /etc/pagent/TCP2.policy FLUSH
  6. TcpImage ファイルで、TTLS 構成ファイルを指し示す。以下に例を示します。
    TTLSConfig /etc/pagent/pagttls1.ttls
  7. TTLS 構成ファイルで、TTLSRule、TTLSGroupAction、TTLSEnvironment、および TTLSConnectionAction ステートメントをコーディングする。 TTLSEnvironmentAdvancedParms ステートメントで ApplicationControlled パラメーターの値を On に設定していることを確認してください。以下に例を示します。
    TTLSRule        tn_serv1             
    {                                    
      LocalPortRange 23                  
      Direction      Inbound              
      Jobname TCP1                      
      TTLSGroupActionRef tn_grp_act       
      TTLSEnvironmentActionRef tn_env_act
    }
    
    TTLSGroupAction tn_grp_act  
    {                           
     TTLSEnabled On             
     Trace  7                 
     GroupUserInstance  1
    }     
    
    TTLSEnvironmentAction tn_env_act        
    {                                       
      HandshakeRole Server                  
      TTLSKeyringParms          
      {                         
         Keyring TNsafkeyring   
      }                         
      TTLSEnvironmentAdvancedParms         
      {                                    
       ApplicationControlled On             
      } 
     EnvironmentUserInstance  1   
    }
  8. z/OS® UNIX pasearch コマンドを使用して z/OS UNIX ポリシー・エージェントからの情報を照会することによって、ポリシーが正しく入力されていることを確認する。 pasearch -t コマンドは、z/OS UNIX システム・サービス・シェルから発行してください。複数の TCP/IP スタックがアクティブである場合は、pasearch -t -p procname コマンドを発行して、特定の TCP/IP スタックを照会します。pasearch コマンドは、Policy API (PAPI) アプリケーションです。 PAPI アプリケーションを実行したことがない場合は、papi.dll ファイルが検出されなかったことを示すメッセージが表示される場合があります。PAPI および PAPI アプリケーションの実行について詳しくは、「z/OS Communications Server: IP Programmer's Guide and Reference」を参照してください。

Telnet プロファイル・ステートメントから同等の AT-TLS ポリシー・ステートメントへの変換

現在 Telnet プロファイルの SECUREPORT ステートメントを使用している場合、以下の表で、Telnet プロファイル・ステートメントを同等な AT-TLS ポリシー・ステートメントに変換する方法が説明されています。

表 1. Telnet プロファイル・ステートメントから AT-TLS ポリシー・ステートメントへの変換
Telnet ステートメント 同等な AT-TLS ステートメント AT-TLS ポリシー・ステートメント
CLIENTAUTH NONE HandshakeRole Server TTLSConnectionAction または TTLSEnvironmentAction
CLIENTAUTH SSLCERT HandshakeRole ServerWithClientAuth および ClientAuthType Required TTLSConnectionAction または TTLSEnvironmentAction / TTLSEnvironmentAction 内の TTLSEnvironmentAdvancedParms
CLIENTAUTH SAFCERT HandshakeRole ServerWithClientAuth および ClientAuthType SAFCHECK TTLSConnectionAction または TTLSEnvironmentAction / TTLSEnvironmentAction 内の TTLSEnvironmentAdvancedParms
CRLLDAPSERVER GSK_LDAP_Server および GSK_LDAP_Server_Port TTLSEnvironmentAction 内の TTLSGskLdapParms
ENCRYPTION TTLSCipherParms TTLSConnectionAction または TTLSEnvironmentAction
KEYRING Keyring TTLSEnvironmentAction 内の TTLSKeyRingParms
SSLV2 SSLv2 TTLSEnvironmentAction 内の TTLSEnvironmentAdvancedParms または TTLSConnectionAction 内の TTLSConnectionAdvancedParms
SSLTIMEOUT HandshakeTimeout TTLSEnvironmentAction 内の TTLSEnvironmentAdvancedParms または TTLSConnectionAction 内の TTLSConnectionAdvancedParms
ヒント: Telnet プロファイル・ステートメント CLIENTAUTH には複数の変形が考えられます。AT-TLS では、クライアント認証が行われるかどうかは、TTLSEnvironmentAction か TTLSConnectionAction ステートメントのどちらかの HandshakeRole パラメーターによって制御されます。接続にクライアント認証が必要な場合、認証のレベルは、TTLSEnvironmentAdvancedParms ステートメントの ClientAuthType パラメーターで制御されます。
  • Telnet 構成内の異なる ParmsGroup ステートメントで CLIENTAUTH SSLCERT と CLIENTAUTH SAFCERT の両方がある場合、2 つの TTLSEnvironmentAction ステートメントが必要です。ClientAuthType Required に対する 1 つの TTLSEnvironmentAction ステートメントと、ClientAuthType SAFCheck に対する 1 つの TTLSEnvironmentAction ステートメントです。2 つの TTLSRule ステートメントはそれぞれ、AT-TLS の異なる TTLSEnvironmentAction ステートメントを参照し、Telnet プロファイルの 2 つの PARMSMAP ステートメントに置き換わります。
  • CLIENTAUTH NONE と CLIENTAUTH SAFCERT の組み合わせがある場合は、HandshakeRole ServerWithClientAuth を伴う TTLSEnvironmentAction ステートメント、および HandshakeRole Server を伴う TTLSConnectionAction ステートメントが必要です。AT-TLS の 2 つの TTLSRule ステートメント (TTLSConnectionAction ステートメントを伴うものと、伴わないもの) は、Telnet プロファイルの 2 つの PARMSMAP ステートメントに置き換わります。代わりに、HandshakeRole Server を伴う 2 つ目の TTLSEnvironmentAction ステートメントを作成できますが、TTLSConnectionAction ステートメントと比較すると、TTLSEnvironmentAction ステートメントに関連したリソースが増えます。

Telnet プロファイル・ステートメントを使用した Telnet セキュリティーの構成

Telnet プロファイル構成に基づくシステム SSL 環境の初期化が行われるのは、最初の SECUREPORT ポートがアクティブにされた時点です。その後は、すべての SECUREPORT ポートが停止 (V TCPIP,tnproc,T,STOP,PORT=SECURE) する場合を除いて、初期化は行われません。 ハードウェア暗号化が使用されるかどうかは、Telnet の初期化時点で それが使用可能かどうかによって決まります。Telnet で ICSF を使用するには、ICSF がシステム SSL から使用可能でなければなりません。 暗号支援状況メッセージが SYSOUT に出力されるのは、最初の Telnet セキュア・ポートがアクティブになる時点です。 ハードウェア暗号化について詳しくは、TLS/SSL セキュリティーを参照してください。

セキュア接続を実装するには、Telnet がシステム SSL DLL に対する APF 許可アクセスを持っていなければなりません。デフォルトでは、システム SSL DLL は SYS1.SIEALNKE にあります。システム SSL は、C ランタイム・ライブラリー (SCEERUN) および C/C++ 標準ライブラリーを使用し、これらは、Telnet からもアクセス可能であることが必要です。 これらのライブラリーにアクセスするには、ライブラリーをリンク・リストに追加するか、または Telnet プロシージャーの STEPLIB 内に指定します。リンク・リストを介してアクセスする場合、リンク・リストが許可されて いる (IEASYSxx parmlib メンバーに LNKAUTH=LNKLST が指定されている) か、またはライブラリーが 明示的に APF 許可されている必要があります。STEPLIB を介してアクセスする場合、ライブラリーが APF 許可され、DISP=SHR が指定されていなければなりません。Telnet プロファイルも更新する必要があります。SSL に関連するプロファイル・パラメーターの概要を以下に示します。For a detailed これらのパラメーターの詳細な説明については、「z/OS Communications Server: IP 構成解説書」を参照してください。

SECUREPORT ポートを定義するには、次の 2 つのステートメントが必要です。

鍵リングは TELNETGLOBALS または TELNETPARMS ブロックに定義できます。 TELNETGLOBALS ブロックの使用は、すべての SECUREPORT ポートについて同じ鍵リングが定義されていることを確認できます。したがって、これが優先定義方式です。TELNETPARMS ブロックに指定する場合には、SECUREPORT ポートごとに同じ鍵リング・タイプおよびファイルを指定しなければなりません。最初に読み取られた鍵リング・ファイル名が、正しい鍵リング・ファイル名と見なされます。TELNETGLOBALS 鍵リングが最初に読み取られ、次に TELNETPARMS 鍵リングが逆順で読み取られます。最初のものに一致しない鍵リングはすべてリジェクトされ、そのポートの更新は失敗に終わります。ポートがセキュアであることを確認するには、D TCPIP,tnproc,T,PROFILE コマンドを発行します。 セキュリティー見出しの下の最初の列は、ポート・タイプを示します。 SECUREPORT ポートには S、TTLSPORT ポートには T、基本ポートには B が表示されます。表示の下部付近に、Telnet が使用している鍵リング名が表示されています。

サーバー認証で、Telnet の TLS サポートを使用可能にするには、以下のステップが必要です。

  1. Telnet の秘密鍵とサーバー証明書を生成します。
  2. 1 つ以上の SECUREPORT ポートを組み込むように Telnet を構成します。TELNETGLOBALS ブロックまたは TELNETPARMS ブロックに、前のステップで作成した鍵リングの名前を指定します。以下に例を示します。
    • KEYRING HFS /usr/ssl/server.kdb

      この例では、2 つのファイル server.kdb および server.sth が gskkyman ユーティリティーを使用して作成されています。サーバーの証明書は server.kdb ファイルに入っていて、デフォルト証明書として指定されています。

      鍵データベースおよびパスワード・スタッシュ・ファイルは同じディレクトリーになければなりません。

    • KEYRING SAF serverkeyring

      この例では、鍵と証明書を管理するために、RACF が使用されています。サーバー証明書は、SERVERKEYRING という鍵リングに接続され、デフォルト証明書として指定されています。

  3. Telnet を再始動するか、更新された構成ファイルを指定して VARY TCPIP,tnproc,OBEYFILE コマンドを発行します。

オプションのセキュリティー・ステートメント

TELNETGLOBALS、TELNETPARMS、または PARMSGROUP ブロック内の SECUREPORT ポートに対してのみ、オプションのセキュリティー・ステートメントを指定できます。PARMSGROUP ブロックに指定されたステートメントは、PARMSMAP ステートメントによって PARMSGROUP ブロックにマップされたクライアントのみに適用され、TELNETPARMS または TELNETGLOBALS ブロックに指定されたステートメントをオーバーライドします。TELNETPARMS ブロックに指定したステートメントは、PARMSGROUP ステートメントによってオーバーライドされない場合、 そのポートに関するすべての接続に適用されます。TELNETGLOBALS ブロックに指定したステートメントは、TELNETPARMS または PARMSGROUP ステートメントによってオーバーライドされない場合、任意のポートに関するすべての接続に適用されます。

CONNTYPE ステートメントについては、セットアップ・セクションの説明を参照してください。

ENCRYPTION ステートメントを使用すると、暗号化アルゴリズムをこのステートメントに含まれているものだけに制限できます。 このステートメントが指定されない場合は、Telnet は、指定可能なすべての暗号化アルゴリズムを使用します。指定可能な暗号を解く鍵、および ENCRYPTION ステートメントが使用されていない場合に Telnet によって使用されるデフォルト順序については、「z/OS Communications Server: IP 構成解説書」を参照してください。ENCRYPTION ステートメントを使用する理由のいくつかを、以下に示します。

SSLV2 ステートメントは、SSLv2 プロトコルを使用可能に設定します。デフォルト値は NOSSLV2 で、これは SSLv2 プロトコルの使用を禁止します。SSLv2 プロトコルが必要になる可能性があるのは、クライアントが SSLv3、TLSv1.0、または TLSv1.1 をサポートしていない場合です。

SSLV3 ステートメントは、SSLv3 プロトコルを使用可能に設定します。デフォルト値は NOSSLV3 で、これは SSLv3 プロトコルの使用を禁止します。SSLv3 プロトコルが必要になる可能性があるのは、クライアントが TLSv1.0 または TLSv1.1 をサポートしていない場合です。

CLIENTAUTH ステートメントは、クライアントがサーバーにクライアント証明書を送信する必要があることを指示します。このステートメントを指定しない場合、SSL ハンドシェーク時にクライアント証明書は要求されないで、証明書に基づくクライアント認証は実行されません。実行される検査のレベルは、指定したオプションによって決まります。

有効な CLIENTAUTH のオプションは以下のとおりです。

CRLLDAPSERVER ステートメントは、TELNETGLOBALS ブロックで指定され、証明書取り消しリスト (CRL) LDAP サーバーの名前または IP アドレスおよびポートを定義します。CRL LDAP サーバーは、クライアント証明書が受信された (CLIENTAUTH が指定された) 場合にのみ使用されます。CLIENTAUTH と CRLLDAPSERVER ステートメントを指定した場合、クライアント認証時に証明書取り消しリストが検査されます。証明書取り消しリストでクライアントの証明書が検出された場合、接続はクローズされます。Telnet には最大 5 つの CRL LDAP サーバーを定義することができます。

SECUREPORT ポートがアクティブである間、鍵リング (名前、タイプ、または内容) あるいは CRL LDAP サーバー (名前または位置) の変更を、VARY TCPIP,tnproc,OBEYFILE コマンドを使用して行うことはできません。 鍵リングまたは CRL LDAP サーバーを変更するには、最初にすべての SECUREPORT ポートを停止します (V TCPIP,tnproc,T,STOP,PORT=S)。 その後、VARY TCPIP,tnproc,OBEYFILE コマンドを実行して、SECUREPORT ポートを新規の鍵リングまたは CRL LDAP サーバーで再始動します。 CRL LDAP サーバーが停止するか、または接続が失われた場合、システム SSL が以後の再接続を認識できない可能性があります。この状態は、CRL LDAP サーバーの変更と同様に処理する必要があります。

Telnet プロファイルの例

この例では、以下の特性を持つ 3 つのポートを定義します。

図 1. ポート 1023 接続特性
Telnet プロファイルの例で定義された 3 つのポートのうちの 1 つであるポート 1023 の接続の特性を示す
注: TLS 接続セキュリティーに適用できる定義は、表示されている定義のみです。追加のパラメーターが必要な場合があります。すべての接続は、ジョブ名 TCP1 で TCP/IP スタックを経由することを前提としています。

TCP/IP 構成ステートメント:

⋮
 TCPCONFIG TTLS
⋮

Telnet プロファイル・ステートメント:

TELNETPARMS            ; basic port does not support secure connections 
 Port 23
ENDTELNETPARMS

TELNETPARMS                        ; port that allows only secure connections
 SECUREPORT 992                    ; no client authentication requested
 KEYRING hfs /usr/keyring/tcp1.kdb ; keyring used by all SECUREPORTs
ENDTELNETPARMS                     ; any supported encryption algorithm

TELNETPARMS            ; port that allows secure and BASIC connections. 
 TTLSPORT 1023         ; note: BEGINVTAM block has PARMSGROUP that may override CONNTYPE
 CONNTYPE SECURE       ; SECURE is default 
ENDTELNETPARMS         


BEGINVTAM
 Port 1023
 ...                    ; Mapping statements
 IPGROUP LocalIP 
   255.255.255.0:10.1.1.0 
   255.255.255.0:10.1.2.0 
 ENDIPGROUP 

 PARMSGROUP BasicPG     ; override default ConnType
   CONNTYPE BASIC       ; support basic connections mapped to this group
 ENDPARMSGROUP 
 PARMSGROUP AdminPG
   CONNTYPE ANY         ; connections mapped to this group allow any type of connection
 ENDPARMSGROUP

 PARMSMAP AdminPG 10.1.3.3 ; this ip address can use secure or basic connections 
 PARMSMAP BasicPG localIP  ; hosts defined in IPGROUP localIP, 
                           ; will use basic connections as defined in PARMSGROUP BasicPG
ENDVTAM


BEGINVTAM
 Port 992 23
 ...                       ;Mapping statements
                           ;no PARMSGROUP defined for these ports
                           ;TELNETPARMS definitions used for all connections
ENDVTAM

AT-TLS ポリシー・ステートメント:

TTLSRule        tn_serv             
{                                    
  LocalPortRange 1023                  
  Direction      Inbound              
  Jobname TCP1                      
  TTLSGroupActionRef tn_grp_act       
  TTLSEnvironmentActionRef tn_env_act
}

TTLSGroupAction tn_grp_act  
{                           
 TTLSEnabled On             
 Trace  7                 
 GroupUserInstance  1
}     

TTLSEnvironmentAction tn_env_act        
{                                       
  HandshakeRole ServerWithClientAuth                  
  TTLSKeyringParms          
  {                         
     Keyring TNsafkeyring   
  }                         
  TTLSEnvironmentAdvancedParms         
  {                                    
   ClientAuthType Required  
   ApplicationControlled On           
  }
  EnvironmentUserInstance  1   
}