邮件设置

发送/接收邮件
发送邮件
通过Sendmail(默认)
通过SMTP或SMTPS服务器
邮件队列
接收邮件
通过OTRS图形界面配置邮件帐户
通过命令行程序和Procmail (otrs.Console.pl Maint::PostMaster::Read)
通过POP3或IMAP收取邮件并将fetchmail用于otrs.Console.pl Maint::PostMaster::Read
通过OTRS 邮箱管理员模块过滤/分派(用于更复杂的分派)
邮件过滤器故障排除
用PGP加密邮件
用S/MIME加密邮件
在客户用户后端获取S/MIME证书

发送/接收邮件

发送邮件

通过Sendmail(默认)

OTRS可以通过 SendmailPostfixQmail 或者Exim发送电子邮件。 默认配置是使用Sendmail,开箱即用。

你可以通过图形配置前端界面配置发送邮件设置 (Framework::Core::Sendmail)。

通过SMTP或SMTPS服务器

OTRS可以通过SMTP(Simple Mail Transfer Protocol /RFC 821)或Secure SMTP发送邮件。

SMTP服务器设置可以通过系统配置(Framework::Core::Sendmail)进行配置。 如果你没有看到SMTPS选项,则缺少了所需的Perl模块。 在这种情况下,请参阅 “安装OTRS所需的Perl模块”以获取说明。

邮件队列

OTRS在发送之前将所有电子邮件排队,并让一个守护进程任务在适当时候异步处理。 在正常安装中,电子邮件将由OTRS守护进程每分钟发送一次。

要检查电子邮件发送的状态,可以使用带 --list 参数的控制台命令bin/otrs.Console.pl Maint::Email::MailQueue

shell> cd /opt/otrs/
shell> bin/otrs.Console.pl Maint::Email::MailQueue --list
  +----+-----------+----------+----------------+--------------------+----------+----------------+-------------------+
  | ID | ArticleID | Attempts | Sender         | Recipient          | Due Time | Last SMTP Code | Last SMTP Message |
  +----+-----------+----------+----------------+--------------------+----------+----------------+-------------------+
  | 28 | 284       | 0        | otrs@localhost | marketing@otrs.com | -        | -              | -                 |
  | 29 | 285       | 0        | otrs@localhost | feedbac@otrs.com   | -        | -              | -                 |
  +----+-----------+----------+----------------+--------------------+----------+----------------+-------------------+

  Mail queue contains 2 message(s)
                

为了过滤结果表,可以使用 -filter 参数,例如使用发送作业的ID。

shell> bin/otrs.Console.pl Maint::Email::MailQueue --list --filter ID::28
  +----+-----------+----------+----------------+--------------------+----------+----------------+-------------------+
  | ID | ArticleID | Attempts | Sender         | Recipient          | Due Time | Last SMTP Code | Last SMTP Message |
  +----+-----------+----------+----------------+--------------------+----------+----------------+-------------------+
  | 28 | 284       | 0        | otrs@localhost | marketing@otrs.com | -        | -              | -                 |
  +----+-----------+----------+----------------+--------------------+----------+----------------+-------------------+

  Mail queue contains 1 message(s)

Done.
                

要删除排队等待发送的电子邮件,请指定--delete-all参数或带有一些活动的过滤器的--delete参数。

shell> bin/otrs.Console.pl Maint::Email::MailQueue --delete --filter ID::28
Deleted messages from mail queue.
Done.
                

你也可以手动发送电子邮件,而无需等待OTRS守护进程任务开始生效。只需指定--send参数即可。

shell> bin/otrs.Console.pl Maint::Email::MailQueue --send
1 message(s) successfully sent!
Done.
                

接收邮件

通过OTRS图形界面配置邮件帐户

OTRS能够从POP3、POP3S、IMAP和IMAPS的邮件帐户接收邮件。

通过系统管理页面的“邮箱管理员邮件帐户”链接配置你的邮件帐户。

如果要创建一个新的邮件帐户(见下图),必须指定邮件服务器名称、登录用户名和密码。另外,你要选择邮件服务器的类型(可以是POP3、POP3S、IMAP或IMAPS)。如果你没有看到需要的类型,说明系统中缺失需要的Perl模块。在这种情况下,请参考为OTRS安装必需的Perl模块的说明。

图 4.81. 新增一个邮件账号

新增一个邮件账号


If you select Yes for the value of the Trusted option, any X-OTRS headers attached to an incoming message are evaluated and executed. Because the X-OTRS header can execute some actions in the ticket system, you should set the Trusted option to Yes only for known senders. X-OTRS-Headers are used by the filter module in OTRS. The X-OTRS headers are explained in this table in more detail. Any postmaster filter rules created are executed, irrespective of the Trusted option's setting.

如果需要按队列或“To:(收件人)”字段的内容排序,则可以控制传入消息的分发。 对于“wv分派”字段,如果选择“按所选队列分派”,则所有传入的消息都将被分类到指定的队列中,邮件收件人地址在这种情况下被忽略。 如果选择“按收件人(To:)分派”,则系统将检查队列是否与传入邮件的“To:(收件人)”字段中的地址相关联。 你可以在系统管理页面的电子邮件地址管理部分中将地址链接到队列。 如果To:(收件人)字段中的地址已与队列链接,则新消息将被分派到链接队列中。 如果在To:(收件人)字段中的地址没有链接到任何队列,则消息流入系统中的“Raw”队列,这是默认安装后的邮箱管理员默认队列

邮件帐户的所有数据都保存在OTRS数据库中。bin/otrs.Console.pl Maint::PostMaster::MailAccountFetch命令使用数据库中的设置来收取邮件。你可以手动执行它来检查你的邮件设置是否能正常工作。

在一个普通安装的OTRS中,由OTRS守护进程每10分钟收取一次邮件。

注意

收取邮件时OTRS会从POP或IMAP服务器上删除邮件。没有选项来让服务器仍保留一份副本。如果你想在服务器保留一份副本,你应当在邮件服务器上创建转发规则,请查阅你的邮件服务器文档以获取详细信息。

通过命令行程序和Procmail (otrs.Console.pl Maint::PostMaster::Read)

如果你不能使用邮件帐户来收取邮件到OTRS,命令行程序 bin/otrs.Console.pl Maint::PostMaster::Read可能是一个解决这个问题的办法。它通过STDIN(标准输入)取走邮件并通过管道直接输入到OTRS中,这意味着如果MDA(邮件投递代理,如procmail)执行这个程序就能在OTRS中使用邮件。

为了测试不用MDA时bin/otrs.Console.pl Maint::PostMaster::Read的效果,执行下面的脚本。

linux:/opt/otrs# cd bin
linux:/opt/otrs/bin# cat ../doc/sample_mails/test-email-1.box | ./otrs.Console.pl Maint::PostMaster::Read
linux:/opt/otrs/bin#
                

脚本:测试没有MDA的邮箱管理员。

如果这封邮件显示在队列视图中,则你的设置能工作了。

例 4.2. 使用otrs.Console.pl通过Procmail路由

为了在一个特定队列中路由邮件,按下面的例子使用otrs.Console.pl

| $SYS_HOME/bin/otrs.Console.pl Maint::PostMaster::Read --target-queue=QUEUENAME
                    

当分类到一个子队列时,你必须使用双冒号::来分隔父队列和子队列。

| $SYS_HOME/bin/otrs.Console.pl Maint::PostMaster::Read --target-queue=QUEUENAME::SUBQUEUE
                    


Procmail是Linux平台非常通用的一个邮件过滤器。它已大部分系统中安装,如果没有安装,看看procmail主页

要配置procmail用于OTRS(基于procmail配置的MTA如sendmail、postfix、exim或qmail),使用~otrs/.procmailrc.dist文件,将它复制为.procmailrc,并添加下面脚本中的行到文件中。

SYS_HOME=$HOME
PATH=/bin:/usr/bin:/usr/local/bin
# --
# Pipe all email into the PostMaster process.
# --
:0 :
| $SYS_HOME/bin/otrs.Console.pl Maint::PostMaster::Read
                

脚本:配置procmail用于OTRS。

所有发送给本地OTRS用户的邮件将通过管道传递给bin/otrs.Console.pl Maint::PostMaster::Read,然后显示在你的队列视图中。

通过POP3或IMAP收取邮件并将fetchmail用于otrs.Console.pl Maint::PostMaster::Read

为了通过POP3或IMAP邮件中收取邮件到OTRS主机/本地OTRS帐户和procmail,使用fetchmail

注意

OTRS主机上需要一个可以工作的SMTP配置。

你可以使用OTRS的home目录中的文件.fetchmailrc.dist,将它得到为.fetchmailrc。修改为你需要的内容(见下面的例子)。

例 4.3. .fetchmailrc

#poll (mailserver) protocol POP3 user (user) password (password) is (localuser)
poll mail.example.com protocol POP3 user joe password mama is otrs
                    


不要忘记设置文件.fetchmailrc的权限为710(chmod 710 .fetchmailrc)!

使用上面例子中的文件.fetchmailrc,如果执行了命令fetchmail -a,会转发所有的邮件到本地OTRS帐户。如果你要定期收取邮件,用这个命令设置一个cron任务即可。

通过OTRS 邮箱管理员模块过滤/分派(用于更复杂的分派)

如果你使用bin/otrs.Console.pl Maint::PostMaster::Readbin/otrs.Console.pl Maint::PostMaster::MailAccountFetch方法,你可以使用邮箱管理员过滤器模块插入或修改X-OTRS头信息。通过X-OTRS头信息,工单系统能够对进入的邮件执行一些操作,例如:分类到一个特定的队列、修改优先级或修改客户ID。关于X-OTRS头的更多信息请参阅系统管理页面的添加邮件帐户部分。

有一些默认的过滤器模块:

注意

任务名称(如$Self->{'PostMaster::PreFilterModule'}->{'JobName'})需要是唯一的。

Kernel::System::PostMaster::Filter::Match是一个匹配一些邮件头(如发件人、收件人、主题等)的默认模块。如果匹配了一个过滤器规则,它可以设置新的邮件头(例如X-OTRS-Ignore: yes或X-OTRS-Queue: spam)。下面例子中的任务可以添加到文件Kernel/Config.pm

例 4.4. 过滤器模块Kernel::System::PostMaster::Filter::Match的任务示例

# Job Name: 1-Match
# (block/ignore all spam email with From: noreply@)
$Self->{'PostMaster::PreFilterModule'}->{'1-Match'} = {
    Module => 'Kernel::System::PostMaster::Filter::Match',
    Match => {
        From => 'noreply@',
    },
    Set => {
        'X-OTRS-Ignore' => 'yes',
    },
};
# Job Name: 2-Match
# (sort emails with From: sales@example.com and Subject: **ORDER**
# into queue 'Order')
$Self->{'PostMaster::PreFilterModule'}->{'2-Match'} = {
    Module => 'Kernel::System::PostMaster::Filter::Match',
    Match => {
        To => 'sales@example.com',
        Subject => '**ORDER**',
    },
    Set => {
        'X-OTRS-Queue' => 'Order',
    },
};
                    


Kernel::System::PostMaster::Filter::CMD是一个将邮件通过管道传递到外部命令的默认模块。输出为STDOUT(标准输出),如果结果为真,则设置新的邮件头(如X-OTRS-Ignore: yes 或 X-OTRS-Queue: spam)。下面例子中的内容可以添加到文件Kernel/Config.pm

例 4.5. 过滤器模块Kernel::System::PostMaster::Filter::CMD的任务示例

# Job Name: 5-SpamAssassin
# (SpamAssassin example setup, ignore spam emails)
$Self->{'PostMaster::PreFilterModule'}->{'5-SpamAssassin'} = {
    Module => 'Kernel::System::PostMaster::Filter::CMD',
    CMD => '/usr/bin/spamassassin | grep -i "X-Spam-Status: yes"',
    Set => {
        'X-OTRS-Ignore' => 'yes',
    },
};
                    


Kernel::System::PostMaster::Filter::ExternalTicketNumberRecognition是一个在邮件主题、正文或这两者中使用正则表达式解析外部标识的默认模块。它在一个定义的动态字段中存储这个值。当一封邮件进入时,OTRS会首先搜索一个外部标识,当它找到一个外部标识,查询OTRS中预定义的动态字段,如果它找到了一个存在的工单,它就会更新这个工单,否则它会创建一个新的工单并将这个外部引用号放入单独的字段。

OTRS系统配置已经提供了4种不同的设置来设置工单编号,如果还需要更多的设置就需要手动添加。下面的示例可用于Kernel/Config.pm来扩展系统配置的设置。

例 4.6.  过滤器模块Kernel::System::PostMaster::Filter::ExternalTicketNumberRecognition的任务示例

# Job Name: ExternalTicketNumberRecognition
# External Ticket Number Reconition, check for Incident-<number> in incoming mails subject and
# body from the addeesses <sender>@externalticket.com, if number is found it will be stored in
# the dynamic field 'ExternalNumber' (that need to be setup in the Admin Panel).
$Self->{'PostMaster::PreFilterModule'}->{'000-ExternalTicketNumberRecognition'} = {
    'FromAddressRegExp' => '\\s*@externalticket.com',
    'NumberRegExp'      => 'Incident-(\\d.*)',
    'SearchInSubject'   => '1',
    'SearchInBody'      => '1',
    'TicketStateTypes'  => 'new;open'
    'DynamicFieldName'  => 'ExternalNumber',
    'Module'            => 'Kernel::System::PostMaster::Filter::ExternalTicketNumberRecognition',
    'Name'              => 'Test External Ticket Number',
    'SenderType'        => 'system',
};
                

配置选项

  • FromAddressRegExp(发件人地址正则表达式)

    这是一个可选的设置。只有匹配这个“From:(发件人)”地址的邮件才会考虑使用这个过滤器。你可以调整这个设置为外部系统用来发出邮件的发件人地址。在这种情况下这个地址可以不同,你可以设置这个选项为空,这样OTRS不会检查发件人地址。

  • NumberRegExp(数字正则表达式)

    这是一个强制设置。这个设置包含了OTRS用来从主题或工单正文中提取工单编号的正则表达式。默认的正则表达式会匹配出现的如‘Incident-12354’,并把括号之间的部分放入动态字段,此处是‘12354’。

  • SearchInSubject(搜索主题)

    如果这个设置为‘1’,会在邮件主题中搜索工单编号。

  • SearchInBody(搜索正文)

    如果这个设置为‘1’,会在邮件正文中搜索工单编号。

  • TicketStateTypes(工单状态类型)

    这是一个可选的设置。如果指定了,它将只搜索OTRS处理指定状态类型的外部工单。状态类型用分号分隔。

  • DynamicField(动态字段)

    这是一个必填设置。它定义了用来存储外部编号的动态字段(字段名必须存在于系统并处于有效状态)。

  • SenderType(发件人类型)

    这个参数定义OTRS中创建的用于信件的发件人类型。

Kernel::System::PostMaster::Filter::Decrypt是一个默认模块,能够将加密的传入电子邮件(S/MIME或PGP)解密,将未加密的邮件正文放在电子邮件标头X-OTRS-BodyDecrypted中,以便稍后处理。 此外,它还可以将电子邮件正文更新为未加密的版本。

要对电子邮件进行解密,系统需要正确地配置 S/MIME 和/或 PGP ,并且有解密信息所需的私钥。

本模块默认是禁用的,可以直接在系统管理面板的系统配置中进行配置。

配置选项

  • StoreDecryptedBody

    设置本选项为“1”来更新邮件正文为未加密的版本(如果成功解密)。注意使用此选项后电子邮件将存储为未加密格式且无法还原此操作。

当然你也可以开发你自己的邮箱管理员过滤器模块。

邮件过滤器故障排除

这部分显示了在排查邮箱管理员过滤器的故障时一些共同问题及需要考虑的事情。

  • 过滤器按它们名称的字母顺序按序匹配。如果某个条件匹配了两次,则最后匹配的过滤器生效。

  • 匹配后停止”可以防止重复匹配。

  • 确保正则表达式是有效的。

  • 可以设置头信息来控制ORTS,但不会写入邮件中。

  • 当匹配一个发件人、抄送、收件人时,使用EMAILADDRESS: <your@address>

  • 邮箱必须是可信的。

  • 匹配条件是“与”条件。

  • 邮箱管理员过滤器不能匹配工单属性。

注意

有关邮箱管理员过滤器处理的详细信息也记录在通信日志中,可在系统管理中检查通信日志

用PGP加密邮件

OTRS能够使用PGP来签名或加密外发消息。此外,进入的加密消息能被解密。加密和解密都通过GPL工具GnuPG完成。要为OTRS设置GnuPG,需要执行以下步骤:

  1. 通过操作系统的软件包管理器安装GnuPG。

  2. 配置GnuPG用于OTRS。必须创建GnuPG需要的目录和私有密钥。下面脚本中显示的命令必须以‘otrs’用户执行。

        linux:~# su otrs
        linux:/root$ cd
        linux:~$ pwd
        /opt/otrs
        linux:~$ gpg --gen-key
        gpg (GnuPG) 1.4.2; Copyright (C) 2005 Free Software Foundation, Inc.
        This program comes with ABSOLUTELY NO WARRANTY.
        This is free software, and you are welcome to redistribute it
        under certain conditions. See the file COPYING for details.
    
        gpg: directory `/opt/otrs/.gnupg' created
        gpg: new configuration file `/opt/otrs/.gnupg/gpg.conf' created
        gpg: WARNING: options in `/opt/otrs/.gnupg/gpg.conf' are not yet active during t
        his run
        gpg: keyring `/opt/otrs/.gnupg/secring.gpg' created
        gpg: keyring `/opt/otrs/.gnupg/pubring.gpg' created
        Please select what kind of key you want:
           (1) DSA and Elgamal (default)
           (2) DSA (sign only)
           (5) RSA (sign only)
        Your selection? 1
        DSA keypair will have 1024 bits.
        ELG-E keys may be between 1024 and 4096 bits long.
        What keysize do you want? (2048)
        Requested keysize is 2048 bits
        Please specify how long the key should be valid.
             0 = key does not expire
          <n>  = key expires in n days
          <n>w = key expires in n weeks
          <n>m = key expires in n months
          <n>y = key expires in n years
        Key is valid for? (0)
        Key does not expire at all
        Is this correct? (y/N) y
    
        You need a user ID to identify your key; the software constructs the user ID
        from the Real Name, Comment and Email Address in this form:
            "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
    
        Real name: Ticket System
        Email address: support@example.com
        Comment: Private PGP Key for the ticket system with address support@example.com
        You selected this USER-ID:
        "Ticket System (Private PGP Key for the ticket system with address support@examp
        le.com) <support@example.com>"
    
        Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
        You need a Passphrase to protect your secret key.
    
        Passphrase: secret
        Repeat passphrase: secret
    
        We need to generate a lot of random bytes. It is a good idea to perform
        some other action (type on the keyboard, move the mouse, utilize the
        disks) during the prime generation; this gives the random number
        generator a better chance to gain enough entropy.
        ++++++++++.+++++++++++++++++++++++++....+++++.+++++...+++++++++++++++++++++++++.
        +++++++++++++++++++++++++.+++++.+++++.+++++++++++++++++++++++++>++++++++++>+++++
        .......>+++++<+++++................................+++++
    
        Not enough random bytes available.  Please do some other work to give
        the OS a chance to collect more entropy! (Need 280 more bytes)
    
        ++++++++++.+++++..++++++++++..+++++....++++++++++++++++++++.+++++++++++++++.++++
        ++++++++++++++++++++++++++.++++++++++.+++++++++++++++.++++++++++.+++++++++++++++
        ..+++++>.+++++....>+++++........................................................
        ...........................................................>+++++<+++++.........
        .............+++++^^^
        gpg: /opt/otrs/.gnupg/trustdb.gpg: trustdb created
        gpg: key 7245A970 marked as ultimately trusted
        public and secret key created and signed.
    
        gpg: checking the trustdb
        gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
        gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
        pub   1024D/7245A970 2006-02-03
              Key fingerprint = 2ED5 BC36 D2B6 B055 7EE1  5833 1D7B F967 7245 A970
         uid                  Ticket System (Private pgp key for ticket system with addre
        ss support@example.com) <support@example.com>
        sub   2048g/52B97069 2006-02-03
    
        linux:~$
        

    脚本:配置GnuPG。

    正如脚本中显示那样,大部分需要的参数使用默认设置即可。密钥所有者仅需正确输入这个密钥合适的密码就行。

  3. PGP设置屏幕中,应为OTRS激活PGP(第一个选项)。此外,还应设置和检查gpg程序的路径。

    下一个配置设置(PGP::Options)可能也需要修改。通过这个配置设置,可以指定‘otrs’用户每次gpg执行时的参数。尤其是‘otrs’用户的GnuPG配置文件目录很重要。在示例中使用的是/opt/otrs/.gnupg目录,这个目录要在PGP配置过程之前创建。

    通过下一个配置选项(PGP::Key::Password)可以指定密钥对的ID和它们私有密钥的密码。因为外部的通信伙伴用你的公钥加密写给工单系统的消息,OTRS就能使用在这里指定的ID/密码来解密这些消息。

    如何取得你自己的私钥ID?你自己的私钥ID已经在生成密钥过程中显示过了(见前面的步骤1)。可以通过‘otrs’用户执行下面脚本中的命令来取得这个ID:

        linux:~# su otrs
        linux:/root$ cd
        linux:~$ pwd
        /opt/otrs
        linux:~$ gpg --list-keys
        /opt/otrs/.gnupg/pubring.gpg
        ----------------------------
        pub   1024D/7245A970 2006-02-03
        uid                  Ticket System (Private pgp key for ticket system with
        address support@example.com) <support@example.com>
        sub   2048g/52B97069 2006-02-03
    
        linux:~$
        

    脚本:获取你自己的私钥ID。

    私钥ID可以在以“sub”开头的行中找到,它是8个字符长度的十六进制字符串,在这个示例中它是“52B97069”。在OTRS中需要指定的密码就是在生成密钥时输入的密码。

    在输入这些数据后,点击“更新”按钮来保存设置。OTRS现在就准备好接收和解密加密过的消息了。

  4. 最后,导入一个客户的公钥。这确保可以给这个客户发送加密消息。有两个方法来导入一个客户的公钥。

    第一个方法是在客户管理界面指定一个客户的公钥。

    第二个方法是从系统管理页面通过PGP设置指定公钥。在屏幕右侧会显示所有已导入的客户公钥。在激活了PGP且配置了OTRS的PGP后,你自己的公钥也应该在这里列出。在PGP设置屏幕的左侧可以搜索密钥。此外,可以通过一个文件上传一个新的公钥。

    需要导入到OTRS中公钥文件必须是GnuPGP兼容的密钥文件。大部分情况下,存储在一个文件中的密钥是“ASCII码封装的密钥”,OTRS能够处理这个格式。

用S/MIME加密邮件

乍一看,使用S/MIME加密似乎要比PGP复杂一点。首先,你必须为OTRS系统建立一个认证机构(CA)。随后的步骤与PGP非常相似:配置OTRS、安装你自己的证书、导入其它需要的公共证书等等。

S/MIME配置主要是在OTRS的WEB界面之外进行,需要用‘otrs’用户在shell中执行。Linux下MIME配置基于SSL(OpenSSL)。所以首先要检查你的系统中是否安装了OpenSSL软件包。OpenSSL中包括了一个叫CA.pl的脚本文件,可以用它来执行创建证书的大部分重要步骤。为了简化过程,在文件系统查找CA.pl的路径,并将这个路径临时加入当前shell的PATH变量(见下面的脚本)。

otrs@linux:~> rpm -ql openssl | grep CA
/usr/share/ssl/misc/CA.pl
otrs@linux:~> export PATH=$PATH:/usr/share/ssl/misc
otrs@linux:~> which CA.pl
/usr/share/ssl/misc/CA.pl
otrs@linux:~> mkdir tmp; cd tmp
otrs@linux:~/tmp>

脚本:配置S/MIME。

上面的脚本显示创建了一个新的临时目录~/tmp,这是生成证书的位置。

要创建一个证书,在命令行中执行下面的操作(我们假定OTRS系统管理员已经为测试和学习目的创建了一个SSL证书。如果你已经有一个验证过的用来加密的SSL证书,使用它就行了,可以跳过这些步骤):

  1. 建立你自己的SSL认证机构。你需要它来证明你自己的SSL证书请求(见下面的脚本)。

    otrs@linux:~/tmp> CA.pl -newca
    CA certificate filename (or enter to create)
    
    Making CA certificate ...
    Generating a 1024 bit RSA private key
    ...++++++
    ......++++++
    writing new private key to './demoCA/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) [AU]:DE
    State or Province Name (full name) [Some-State]:OTRS-state
    Locality Name (eg, city) []:OTRS-town
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your company
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:OTRS Admin
    Email Address []:otrs@your-domain.tld
    otrs@linux:~/tmp> ls -la demoCA/
    total 8
    -rw-r--r--  1 otrs otrs 1330 2006-01-08 17:54 cacert.pem
    drwxr-xr-x  2 otrs otrs   48 2006-01-08 17:53 certs
    drwxr-xr-x  2 otrs otrs   48 2006-01-08 17:53 crl
    -rw-r--r--  1 otrs otrs    0 2006-01-08 17:53 index.txt
    drwxr-xr-x  2 otrs otrs   48 2006-01-08 17:53 newcerts
    drwxr-xr-x  2 otrs otrs   80 2006-01-08 17:54 private
    -rw-r--r--  1 otrs otrs   17 2006-01-08 17:54 serial
    otrs@linux:~/tmp>
        

    脚本:建立一个SSL认证机构。

  2. 生成一个证书请求(见下面的脚本)。

    otrs@linux:~/tmp> CA.pl -newreq
    Generating a 1024 bit RSA private key
    ..........................................++++++
    ....++++++
    writing new private key to 'newreq.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) [AU]:DE\keyreturn
    State or Province Name (full name) [Some-State]:OTRS-state
    Locality Name (eg, city) []:OTRS-town
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your company
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:OTRS admin
    Email Address []:otrs@your-domain.tld
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Request (and private key) is in newreq.pem
    otrs@linux:~/tmp> ls -la
    total 4
    drwxr-xr-x  6 otrs otrs  232 2006-01-08 17:54 demoCA
    -rw-r--r--  1 otrs otrs 1708 2006-01-08 18:04 newreq.pem
    otrs@linux:~/tmp>
        

    脚本:创建一个证书请求。

  3. 证书请求的签名。证书请求要么用你自己的CA证明签名,要么使用另外的外部认证过的CA以获取更可信的签名(见下面的脚本)。

    otrs@linux:~/tmp> CA.pl -signreq
    Using configuration from /etc/ssl/openssl.cnf
    Enter pass phrase for ./demoCA/private/cakey.pem:
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number:
                fd:85:f6:9f:14:07:16:c8
            Validity
                Not Before: Jan  8 17:04:37 2006 GMT
                Not After : Jan  8 17:04:37 2007 GMT
            Subject:
                countryName               = DE
                stateOrProvinceName       = OTRS-state
                localityName              = OTRS-town
                organizationName          = Your Company
                commonName                = OTRS administrator
                emailAddress              = otrs@your-domain.tld
            X509v3 extensions:
                X509v3 Basic Constraints:
                    CA:FALSE
                Netscape Comment:
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier:
                    01:D9:1E:58:C0:6D:BF:27:ED:37:34:14:D6:04:AC:C4:64:98:7A:22
                X509v3 Authority Key Identifier:
                    keyid:10:4D:8D:4C:93:FD:2C:AA:9A:B3:26:80:6B:F5:D5:31:E2:8E:DB:A8
                    DirName:/C=DE/ST=OTRS-state/L=OTRS-town/O=Your Company/
                    CN=OTRS admin/emailAddress=otrs@your-domain.tld
                    serial:FD:85:F6:9F:14:07:16:C7
    
    Certificate is to be certified until Jan  8 17:04:37 2007 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
    Signed certificate is in newcert.pem
    otrs@linux:~/tmp>
        

    脚本:证书请求的签名。

  4. 使用已经签名的证书请求生成你自己的证书和相关的所有数据。

    otrs@linux:~/tmp> CA.pl -pkcs12 "OTRS Certificate"
    Enter pass phrase for newreq.pem:
    Enter Export Password:
    Verifying - Enter Export Password:
    otrs@linux:~/tmp> ls -la
    total 12
    drwxr-xr-x  6 otrs otrs  328 2006-01-08 18:04 demoCA
    -rw-r--r--  1 otrs otrs 3090 2006-01-08 18:13 newcert.p12
    -rw-r--r--  1 otrs otrs 3791 2006-01-08 18:04 newcert.pem
    -rw-r--r--  1 otrs otrs 1708 2006-01-08 18:04 newreq.pem
    otrs@linux:~/tmp>
        

    脚本:生成一个新证书。

现在已经执行了这些操作,还必须在OTRS中完成S/MIME设置。

这部分的设置在系统管理页面中进行,选择“S/MIME证书”链接。如果在OTRS中还没有启用S/MIME支持,会弹出遮罩屏幕提示系统管理员并提供了启用它的链接。

通过系统配置组"Crypt::SMIME",你还可以启用和配置通用S/MIME支持。

在这里你可以激活S/MIME支持,并定义OpenSSL命令的路径和证书目录。前面创建的密钥文件必须保存在这里指定的目录中,否则OpenSSL无法使用证书。

下一步是在系统管理页面的S/MIME证书链接中执行。在这里,你可以导入OTRS系统的私钥和其它通信伙伴的公钥。输入本节开始部分创建的公钥并添加到OTRS中。

显然,通信伙伴的所有公共S/MIME密钥也可以使用客户用户管理工具导入。

在客户用户后端获取S/MIME证书

可以使用客户用户后端 (例如 LDAP) 作为公共S/MIME 证书的来源。这些证书可以导入到系统,并在 OTRS系统管理页面上的S/MIME 配置 显示。它们可用于从 OTRS 向客户发送加密的电子邮件。

为了启用此特性需要:

  1. 在系统配置中启用SMIME

  2. 在系统配置中启用 SMIME::FetchFromCustomer

  3. 配置客户用户后端以提供属性 UserSMIMECertificate的客户用户的S/MIME 证书 (在 $OTRS_HOME/Kernel/Config/Defaults.pm文件中有一个 LDAP 客户用户映射的例子)。

该功能可通过三种不同的方式使用:

  1. 收到的邮件:

    一个专用的邮箱管理员过滤器(在系统配置PostMaster::PreFilterModule###000-SMIMEFetchFromCustomer 中)将提取每个传入的电子邮件的地址,并试图从客户清单中找到匹配的电子邮件地址。如果发现匹配,它将尝试从客户用户属性获取S/MIME 证书,如果找到了证书它会尝试将其导入(除非它已经导入)。

  2. 特定的邮件地址或所有客户:

    控制台命令Maint::SMIME::CustomerCertificate::Fetch可用来导入一个客户邮件地址的S/MIME证书:

    shell> perl /opt/otrs/bin/otrs.Console.pl Maint::SMIME::CustomerCertificate::Fetch --email customer@example.com
                        

    在这种情况下,控制台命令将尝试用提供的电子邮件地址与一个客户用户的邮件地址进行匹配。如果发现匹配,它将尝试向系统中添加客户用户属性中找到的S/MIME 证书(如果证书还没有添加)。

    同样的控制台命令可用于导入所有客户用户(受限于客户用户后端的CustomerUserSearchListLimit 属性) 的 S/MIME 证书。此选项是专为具有大量客户用户的系统设计的,因为需要太多的时间来执行,根据限制它并不一定会获取所有的客户证书。在这种模式下按如下执行控制台命令︰

    shell> perl /opt/otrs/bin/otrs.Console.pl Maint::SMIME::CustomerCertificate::Fetch --add-all
                        

    使用此选项后控制台命令将客户后端以获取所有可能的客户,检查找到的每个客户是否有S/MIME 证书。如果找到了证书,它将向系统中添加此S/MIME 证书(如果此证书还没有添加到系统)。

  3. 更新已有的证书:

    可以用另一个控制台命令 Maint::SMIME::CustomerCertificate::Renew 来检查系统中所有现有的证书。这将验证客户用户现有的证书是否匹配通过客户用户属性查到的证书。并将在客户用户后端中找到的任何新证书添加到系统 (在这一过程中不会删除证书)。

    这个控制台命令由 OTRS 守护进程通过任务Daemon::SchedulerCronTaskManager::Task ###RenewCustomerSMIMECertificates(如 系统配置所示) 每天自动执行一次,但它也可以根据需要手动执行︰

    shell> perl /opt/otrs/bin/otrs.Console.pl Maint::SMIME::CustomerCertificate::Renew