Solaris のシステム管理 (ネットワークサービス)

ProcedureTLS を使用するよう SMTP を構成する

Solaris 10 1/06 以降のリリースでは、SMTP は sendmail の version 8.13 で Transport Layer Security (TLS) を使用できます。SMTP サーバーおよびクライアントに対するこのサービスは、インターネット上での機密性の高い認証された通信だけでなく、盗聴や攻撃からの保護も実現します。このサービスは、デフォルトでは有効になっていないことに注意してください。

次の手順では、サンプルデータを使用して、sendmail が TLS を使用できるようにする証明書を設定する方法を示します。詳細については、sendmail の version 8.13 で TLS を使用して SMTP を実行するためのサポート」を参照してください。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. sendmail を停止します。


    # svcadm disable -t network/smtp:sendmail
    
  3. sendmail が TLS を使用できるようにする証明書を設定します。

    1. 次の手順を行います。


      # cd /etc/mail
      # mkdir -p certs/CA
      # cd certs/CA
      # mkdir certs crl newcerts private
      # echo "01" > serial
      # cp /dev/null index.txt
      # cp /etc/sfw/openssl/openssl.cnf .
      
    2. 任意のテキストエディタを使用して openssl.cnf ファイルの dir の値を /etc/sfw/openssl から /etc/mail/certs/CA に変更します。

    3. openssl コマンド行ツールを使用して TLS を実装します。

      次のコマンド行は対話型テキストを生成することに注意してください。


      # openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem -days 365 \
      -config openssl.cnf
      Generating a 1024 bit RSA private key
      .....................................++++++
      .....................................++++++
      writing new private key to 'private/cakey.pem'
      Enter PEM pass phrase:
      Verifying - Enter PEM pass phrase:
      -----
      You are about to be asked to enter information that will be incorporated
      into your certificate request.
      What you are about to enter is what is called a Distinguished Name or a DN.
      There are quite a few fields but you can leave some blank
      For some fields there will be a default value,
      If you enter '.', the field will be left blank.
      -----
      Country Name (2 letter code) []:US
      State or Province Name (full name) []:California
      Locality Name (eg, city) []:Menlo Park
      Organization Name (eg, company) [Unconfigured OpenSSL Installation]:Sun Microsystems
      Organizational Unit Name (eg, section) []:Solaris
      Common Name (eg, YOUR name) []:somehost.somedomain.example.com
      Email Address []:someuser@example.com
      
      req

      このコマンドは証明書要求を作成し、処理します。

      -new

      この req オプションを選択すると、新しい証明書要求が作成されます。

      -x509

      この req オプションを選択すると、自己署名付き証明書が作成されます。

      -keyout private/cakey.pem

      この req オプションを選択すると、新しく作成された秘密鍵のファイル名として private/cakey.pem を割り当てることができます。

      -out cacert.pem

      この req オプションを選択すると、出力ファイルとして cacert.pem を割り当てることができます。

      -days 365

      この req オプションを選択すると、証明書を 365 日間証明することができます。デフォルト値は 30 です。

      -config openssl.cnf

      この req オプションを選択すると、構成ファイルとして openssl.cnf を指定することができます。

      このコマンドは、次の内容を指定する必要があります。

      • Country Name (US など)。

      • State or Province Name (California など)。

      • Locality Name (Menlo Park など)。

      • Organization Name (Sun Microsystems など)。

      • Organizational Unit Name (Solaris など)。

      • Common Name (マシンの完全指定のホスト名)。詳細は、check-hostname(1M) のマニュアルページを参照してください。

      • Email Address (someuser@example.com など)。

  4. (省略可能) セキュリティー保護された新しい接続が必要である場合、新しい証明書を作成し、認証局を使用して新しい証明書に署名します。

    1. 新しい証明書を作成します。


      # cd /etc/mail/certs/CA
      # openssl req -nodes -new -x509 -keyout newreq.pem -out newreq.pem -days 365 \
      -config openssl.cnf
      Generating a 1024 bit RSA private key
      ..............++++++
      ..............++++++
      writing new private key to 'newreq.pem'
      -----
      You are about to be asked to enter information that will be incorporated
      into your certificate request.
      What you are about to enter is what is called a Distinguished Name or a DN.
      There are quite a few fields but you can leave some blank
      For some fields there will be a default value,
      If you enter '.', the field will be left blank.
      -----
      Country Name (2 letter code) []:US
      State or Province Name (full name) []:California
      Locality Name (eg, city) []:Menlo Park
      Organization Name (eg, company) [Unconfigured OpenSSL Installation]:Sun Microsystems
      Organizational Unit Name (eg, section) []:Solaris
      Common Name (eg, YOUR name) []:somehost.somedomain.example.com
      Email Address []:someuser@example.com
      

      このコマンドでは、手順 3c で指定した情報と同じ情報を指定する必要があります。

      この例では、証明書と秘密鍵はファイル newreq.pem 内にあることに注意してください。

    2. 認証局を使用して新しい証明書に署名します。


      # cd /etc/mail/certs/CA
      # openssl x509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
      Getting request Private Key
      Generating certificate request
      # openssl ca -config openssl.cnf -policy policy_anything -out newcert.pem -infiles tmp.pem
      Using configuration from openssl.cnf
      Enter pass phrase for /etc/mail/certs/CA/private/cakey.pem:
      Check that the request matches the signature
      Signature ok
      Certificate Details:
              Serial Number: 1 (0x1)
              Validity
                  Not Before: Jun 23 18:44:38 2005 GMT
                  Not After : Jun 23 18:44:38 2006 GMT
              Subject:
                  countryName               = US
                  stateOrProvinceName       = California
                  localityName              = Menlo Park
                  organizationName          = Sun Microsystems
                  organizationalUnitName    = Solaris
                  commonName                = somehost.somedomain.example.com
                  emailAddress              = someuser@example.com
              X509v3 extensions:
                  X509v3 Basic Constraints: 
                      CA:FALSE
                  Netscape Comment: 
                      OpenSSL Generated Certificate
                  X509v3 Subject Key Identifier: 
                      93:D4:1F:C3:36:50:C5:97:D7:5E:01:E4:E3:4B:5D:0B:1F:96:9C:E2
                  X509v3 Authority Key Identifier: 
                      keyid:99:47:F7:17:CF:52:2A:74:A2:C0:13:38:20:6B:F1:B3:89:84:CC:68
                      DirName:/C=US/ST=California/L=Menlo Park/O=Sun Microsystems/OU=Solaris/\
                      CN=someuser@example.com/emailAddress=someuser@example.com
                      serial:00
      
      Certificate is to be certified until Jun 23 18:44:38 2006 GMT (365 days)
      Sign the certificate? [y/n]:y
      
      
      1 out of 1 certificate requests certified, commit? [y/n]y
      Write out database with 1 new entries
      Data Base Updated
      # rm -f tmp.pem
      

      この例では、ファイル newreq.pem には未署名の証明書と秘密鍵が含まれています。ファイル newcert.pem には署名済みの証明書が含まれています。

      x509 ユーティリティー

      証明書の情報を表示し、証明書をさまざまな形式に変換し、証明書要求に署名します。

      ca アプリケーション

      さまざまな形式の証明書要求の署名と、CRL (Certificate Revocation List) の生成に使用されます。

  5. .mc ファイルに次の行を追加することにより、sendmail が証明書を使用できるようにします。


    define(`confCACERT_PATH', `/etc/mail/certs')dnl
    define(`confCACERT', `/etc/mail/certs/CAcert.pem')dnl
    define(`confSERVER_CERT', `/etc/mail/certs/MYcert.pem')dnl
    define(`confSERVER_KEY', `/etc/mail/certs/MYkey.pem')dnl
    define(`confCLIENT_CERT', `/etc/mail/certs/MYcert.pem')dnl
    define(`confCLIENT_KEY', `/etc/mail/certs/MYkey.pem')dnl
    

    詳細は、「TLS を使用して SMTP を実行するための構成ファイルのオプション」を参照してください。

  6. /etc/mail ディレクトリで sendmail.cf ファイルを再構築し、インストールします。

    手順の詳細は、「sendmail 構成を変更する」を参照してください。

  7. openssl を使用して作成したファイルから、.mc ファイルで定義したファイルへの、シンボリックリンクを作成します。


    # cd /etc/mail/certs
    # ln -s CA/cacert.pem CAcert.pem
    # ln -s CA/newcert.pem MYcert.pem
    # ln -s CA/newreq.pem MYkey.pem
    
  8. セキュリティーを高めるには、MYkey.pem に関して、グループなどに対して読み取り権を許可しないでください。


    # chmod go-r MYkey.pem
    
  9. シンボリックリンクを使用して、confCACERT_PATH に割り当てられているディレクトリで CA 証明書をインストールします。


    # C=CAcert.pem
    # ln -s $C `openssl x509 -noout -hash < $C`.0
    
  10. そのほかのホストとのメールのセキュリティーを保護するには、ホストの証明書をインストールします。

    1. ほかのホストの confCACERT オプションにより定義されたファイルを、/etc/mail/certs/host.domain.cert.pem にコピーします。

      host.domain を、ほかのホストの完全指定のホスト名に置き換えます。

    2. シンボリックリンクを使用して、confCACERT_PATH に割り当てられているディレクトリで CA 証明書をインストールします。


      # C=host.domain.cert.pem
      # ln -s $C `openssl x509 -noout -hash < $C`.0
      

      host.domain を、ほかのホストの完全指定のホスト名に置き換えます。

  11. sendmail を再起動します。


    # svcadm enable network/smtp:sendmail
    

例 13–2 Received: メールヘッダー

次に、TLS を使用したセキュリティー保護されたメールの Received: ヘッダーの例を示します。


Received: from his.example.com ([IPv6:2001:db8:3c4d:15::1a2f:1a2b])
        by her.example.com (8.13.4+Sun/8.13.4) with ESMTP id j2TNUB8i242496
        (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
        for <janepc@her.example.com>; Tue, 29 Mar 2005 15:30:11 -0800 (PST)
Received: from her.example.com (her.city.example.com [192.168.0.0])
        by his.example.com (8.13.4+Sun/8.13.4) with ESMTP id j2TNU7cl571102
        version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
        for <janepc@her.example.com>; Tue, 29 Mar 2005 15:30:07 -0800 (PST)

verify の値が OK である、つまり認証が成功したことに注意してください。詳細は、「TLS を使用して SMTP を実行するためのマクロ」を参照してください。


参照

次の OpenSSL のマニュアルページも参照してください。