使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux
В 我们之前的一篇文章 我们讨论了公司企业门户上双因素身份验证的重要性。 上次我们演示了如何在 IIS Web 服务器中设置安全身份验证。

在评论中,我们被要求为 Linux 最常见的 Web 服务器 - nginx 和 Apache 编写说明。

你问——我们写。

您需要什么才能开始?

  • 任何现代 Linux 发行版。 我在 MX Linux 18.2_x64 上进行了测试设置。 这当然不是服务器发行版,但对于 Debian 来说不太可能有任何差异。 对于其他发行版,配置库的路径可能略有不同。
  • 令牌。 我们继续使用该模型 Rutoken EDS PKI,就企业使用的速度特性而言是理想的。
  • 要在 Linux 中使用令牌,您需要安装以下软件包:
    libccid libpcsclite1 pcscd pcsc-tools opensc

使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

颁发证书

在之前的文章中,我们依赖于服务器和客户端证书将使用 Microsoft CA 颁发的事实。 但由于我们在 Linux 中设置所有内容,因此我们还将告诉您另一种颁发这些证书的方法 - 无需离开 Linux。
我们将使用 XCA 作为 CA (https://hohnstaedt.de/xca/),可在任何现代 Linux 发行版上使用。 我们将在 XCA 中执行的所有操作都可以使用 OpenSSL 和 pkcs11-tool 实用程序在命令行模式下完成,但为了更加简单和清晰,我们不会在本文中介绍它们。

入门

  1. 安装:
    $ apt-get install xca
  2. 我们运行:
    $ xca
  3. 我们为 CA 创建数据库 - /root/CA.xdb
    我们建议将证书颁发机构数据库存储在只有管理员有权访问的文件夹中。 这对于保护根证书的私钥非常重要,根证书用于签署所有其他证书。

创建密钥和根 CA 证书

公钥基础设施 (PKI) 基于分层系统。 这个系统中最主要的是根证书颁发机构或根CA。 必须首先创建其证书。

  1. 我们为 CA 创建 RSA-2048 私钥。 为此,请在选项卡上 私钥新的密钥 并选择合适的类型。
  2. 为新密钥对设置名称。 我称之为 CA 密钥。
  3. 我们使用创建的密钥对自行颁发 CA 证书。 为此,请转到选项卡 证书 并推 新证书.
  4. 一定要选择 SHA-256,因为使用 SHA-1 不再被认为是安全的。
  5. 一定要选择作为模板 [默认] CA。 别忘了点击 全部应用,否则不应用模板。
  6. 标签 联系原因 选择我们的密钥对。 您可以在那里填写证书的所有主要字段。

使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

创建密钥和 https 服务器证书

  1. 以类似的方式,我们为服务器创建一个RSA-2048私钥,我将其称为Server Key。
  2. 创建证书时,我们选择服务器证书必须使用CA证书进行签名。
  3. 不要忘记选择 SHA-256.
  4. 我们选择作为模板 [默认] HTTPS_服务器。 点击 全部应用.
  5. 然后在选项卡上 联系原因 选择我们的密钥并填写必填字段。

使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

为用户创建密钥和证书

  1. 用户的私钥将存储在我们的令牌中。 要使用它,您需要从我们的网站安装 PKCS#11 库。 对于流行的发行版,我们分发现成的软件包,位于此处 - https://www.rutoken.ru/support/download/pkcs/。 我们还有arm64、armv7el、armv7hf、e2k、mipso32el的程序集,可以从我们的SDK下载 - https://www.rutoken.ru/developers/sdk/。 除了适用于 Linux 的程序集外,还有适用于 macOS、freebsd 和 android 的程序集。
  2. 向 XCA 添加新的 PKCS#11 提供程序。 为此,请转到菜单 附加选项 到选项卡 PKCS#11 提供商.
  3. 我们按 地址 并选择 PKCS#11 库的路径。 就我而言,它是 usrliblibrtpkcs11ecp.so。
  4. 我们需要一个格式化的 Rutoken EDS PKI 令牌。 下载 rtAdmin 实用程序 - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. 我们执行
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. 我们选择 Rutoken EDS PKI 的 RSA-2048 密钥作为密钥类型。 我将这个密钥称为“客户端密钥”。

    使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

  7. 输入 PIN 码。 我们等待密钥对的硬件生成完成

    使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

  8. 与服务器证书类比,我们为用户创建一个证书。 这次我们选择一个模板 [默认] HTTPS_客户端 并且不要忘记点击 全部应用.
  9. 标签 联系原因 输入有关用户的信息。 我们对保存令牌证书的请求做出肯定的回答。

结果,在选项卡上 证书 在 XCA 中你应该得到这样的东西。

使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux
这组最小的密钥和证书足以开始设置服务器本身。

配置时,我们需要导出CA证书、服务器证书和服务器私钥。

为此,请在 XCA 中相应选项卡上选择所需条目,然后单击 出口.

Nginx的

我不会写如何安装和运行 nginx 服务器 - 互联网上有足够多的关于此主题的文章,更不用说官方文档了。 让我们直接使用令牌设置 HTTPS 和双因素身份验证。

将以下行添加到 nginx.conf 中的服务器部分:

server {
	listen 443 ssl;
	ssl_verify_depth 1;
	ssl_certificate /etc/nginx/Server.crt;
	ssl_certificate_key /etc/nginx/ServerKey.pem;
	ssl_client_certificate /etc/nginx/CA.crt;
	ssl_verify_client on;
}

与在 nginx 中配置 ssl 相关的所有参数的详细说明可以在这里找到 - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

我将简单描述一下我问自己的那些问题:

  • ssl_verify_client - 指定需要验证证书的信任链。
  • ssl_verify_depth - 定义链中受信任根证书的搜索深度。 由于我们的客户端证书是立即在根证书上签名的,因此深度设置为1。如果用户证书是在中间CA上签名的,则必须在此参数中指定2,依此类推。
  • ssl_client_certificate - 指定受信任根证书的路径,在检查用户证书中的信任时使用该路径。
  • ssl_certificate/ssl_certificate_key - 指示服务器证书/私钥的路径。

不要忘记运行 nginx -t 检查配置中是否有拼写错误,以及所有文件是否位于正确的位置,等等。

就这样! 如您所见,设置非常简单。

检查它在 Firefox 中是否正常工作

由于我们完全在 Linux 中完成所有操作,因此我们假设我们的用户也在 Linux 中工作(如果他们有 Windows,那么 请参阅上一篇文章中有关设置浏览器的说明.

  1. 让我们启动 Firefox。
  2. 我们先尝试在没有令牌的情况下登录。 我们得到这张图:

    使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

  3. 去吧 about:preferences#privacy,我们去 安全装置...
  4. 我们按 加载添加新的 PKCS#11 设备驱动程序并指定 librtpkcs11ecp.so 的路径。
  5. 要检查证书是否可见,您可以访问 证书管理器。 系统将提示您输入 PIN 码。 输入正确后,您可以查看选项卡上的内容 您的证书 我们的令牌证书出现了。
  6. 现在让我们使用令牌。 Firefox 会提示您选择将为服务器选择的证书。 选择我们的证书。

    使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

  7. 利润!

    使用 USB 令牌在站点上进行两因素身份验证。 现在也适用于 Linux

设置完成一次,正如您在证书请求窗口中看到的那样,我们可以保存我们的选择。 此后,每次登录门户时,我们只需插入令牌并输入格式化期间指定的用户 PIN 码即可。 经过这样的身份验证后,服务器已经知道哪个用户登录了,你不能再创建任何额外的窗口进行验证,而是立即让用户进入他的个人帐户。

阿帕奇

就像 nginx 一样,安装 apache 应该不会出现任何问题。 如果您不知道如何安装此网络服务器,请使用官方文档。

我们开始设置 HTTPS 和双因素身份验证:

  1. 首先你需要激活mod_ssl:
    $ a2enmod ssl
  2. 然后启用站点的默认 HTTPS 设置:
    $ a2ensite default-ssl
  3. 现在我们编辑配置文件:/etc/apache2/sites-enabled/default-ssl.conf:
        SSLEngine on
        SSLProtocol all -SSLv2
    
        SSLCertificateFile	/etc/apache2/sites-enabled/Server.crt
        SSLCertificateKeyFile /etc/apache2/sites-enabled/ServerKey.pem
    
        SSLCACertificateFile /etc/apache2/sites-enabled/CA.crt
    
        SSLVerifyClient require
        SSLVerifyDepth  10

    正如你所看到的,参数的名称实际上与nginx中的参数名称一致,所以我不再解释它们。 再次强调,欢迎任何对详细信息感兴趣的人阅读该文档。
    现在我们重新启动我们的服务器:

    $ service apache2 reload
    $ service apache2 restart

  4. 正如您所看到的,在任何 Web 服务器上设置双因素身份验证(无论是在 Windows 还是 Linux 上)最多需要一小时。 设置浏览器大约需要 5 分钟。 许多人认为设置和使用双因素身份验证很困难且不清楚。 我希望我们的文章能够揭穿这个神话,至少是一点点。

只有注册用户才能参与调查。 登录拜托

您是否需要根据 GOST 34.10-2012 使用证书设置 TLS 的说明:

  • 是的,TLS-GOST非常有必要

  • 不,使用 GOST 算法进行调优并不有趣

44 位用户投票。 9 名用户弃权。

来源: habr.com

添加评论