我希望在我们公司的网络上使用我的 Linux 工作站,但是我遇到了一些问题,特别是 802.1xi。
我拥有机器的 root 权限,并且是 Windows 域管理员,因此我应该能够访问我需要的任何内容,以便实现此功能。目前,我的 Linux 机器的连接受到限制,这让我相信它已被放入非 802.1x 客户端的默认 VLAN 中。
我想我的总体问题是:如何让我的 Linux 机器在有线 Windows 网络上使用 802.1x?该网络是一个典型的 Windows 域,使用机器帐户和用户帐户。
这是我迄今为止所知道的和尝试过的:
我相信我需要获取该机器的有效客户端机器证书、域的 CA 证书以及客户端的私钥
想法 1,从 Windows 机器/域 CA 机器上获取有效密钥我在 Linux 机器上运行了 Windows VM,并将其加入到域中,认为这将生成一个我可以为 Linux 机器获取的有效客户端证书。-为此,我从 Windows CA 服务器导出了客户端证书和 CA 证书,然后将它们转换为 PEM 格式,为 Linux 上的网络管理器做好准备(假设需要 PEM 而不是 DER)。-然后,我尝试使用 certmgr 在 Windows VM 上导出私钥,但它被标记为不可导出 :-(
想法 2 是 powerbroker... - 我使用 powerbroker open(正式类似)将 linux 机器加入域,getent passwd 现在显示所有域用户。 - 我的想法是这会将客户端证书和私钥放在系统的某个地方(/etc/ssl/certs?)但我什么也找不到
想法 3,询问知道他们实际上在做什么的人。
我应该指出,这台 Linux 机器上原本装有 Windows(我在安装 Linux 时对其进行了 p2v),所以我知道网络交换机设置正确,并且 MAC 等在网络上被接受;我很确定这只是一个 802.1x 问题
编辑:完全忘了提及它的 fedora 21 xfce spin,64 位。
答案1
大家,有个坏消息!Fedora 21 中似乎有一个未修复的错误:802.1x PEAP/MSCHAPv2 有线连接不起作用.因此,虽然下面的答案可能适用于其他发行版,Fedora 21 用户目前运气不佳。
我自己从来没有尝试过,但是这个帖子似乎包含有关在 Linux 客户端和 Windows 域之间设置 802.1x 的非常详细的指南。请注意证书请求部分:它应该可以解决您无法导出证书的问题。软件版本相当旧(Ubuntu为 8.04,超越信托的权力经纪人还是同样地),但基本思想对我来说似乎是可靠的。
我已经格式化了上述帖子,以使其更易于阅读。引用会使代码框变成灰色,所以我把它删掉了,抱歉:
免责声明:本指南是从 Linux Ubuntu 8.04 发行版的角度编写的。为了使其适用于其他 Linux 或 Unix 发行版,可能需要进行一些更改。
您的 Linux 计算机通过 802.1x 进行身份验证所需的两个主要条件是客户端证书和 Windows 域中的帐户。在身份验证过程中,Linux 客户端将其计算机证书提供给交换机,交换机又将其提供给 RADIUS 服务器,RADIUS 服务器验证证书,并验证证书在 Active Directory 中分配给的计算机帐户。如果证书和计算机帐户有效,则 RADIUS 服务器批准身份验证请求并将其发送回交换机,交换机又验证 Linux 机器所连接的端口。
首先需要做的是将您的 Linux 计算机加入 Windows 域。由于 Linux 无法本机加入 Windows 域,因此我们必须下载必要的软件才能执行此操作。Likewise 制作了允许我们执行此操作的软件。要在 Ubuntu 上安装它非常简单,只需按照以下步骤操作:
- sudo apt-get 更新
- sudo apt-get 安装 Likewise-open
- sudo domainjoin-cli join
enter the FQDN of your domain here
enter your admin account here
,您可以使用格式[email protected]
。您还可以通过以下方式使用 GUI 版本:System → Administration → Likewise.
- sudo update-rc.d 同样打开默认值
- sudo /etc/init.d/likewise-open start
如果你没有运行 Ubuntu,你可以在此处下载该软件http://www.likewisesoftware.com/products/likewise_open。您现在可以注销并使用您的域帐户重新登录。我相信[email protected]
域\用户格式都可以。我稍后会测试一下。
Linux 计算机上有三个文件必须正确配置才能进行此身份验证。这三个文件是:
- /etc/wpa_supplicant.conf
- /etc/网络/接口
- /etc/openssl/openssl.cnf
首先,我们将配置软件以允许我们的 Linux 机器使用客户端证书对启用 802.1x 的网络进行身份验证;wpa_supplicant
将用于此。
按照以下步骤配置您的 wpa_supplicant.conf 文件:
sudo gedit /etc/wpa_supplicant.conf
将以下内容粘贴到文件中并保存:
# Where is the control interface located? This is the default path: ctrl_interface=/var/run/wpa_supplicant # Who can use the WPA frontend? Replace "0" with a group name if you # want other users besides root to control it. # There should be no need to chance this value for a basic configuration: ctrl_interface_group=0 # IEEE 802.1X works with EAPOL version 2, but the version is defaults # to 1 because of compatibility problems with a number of wireless # access points. So we explicitly set it to version 2: eapol_version=1 # When configuring WPA-Supplicant for use on a wired network, we don't need to # scan for wireless access points. See the wpa-supplicant documentation if you # are authenticating through 802.1x on a wireless network: ap_scan=0 network={ ssid="<enter any name here, it doesn't matter>" key_mgmt=IEEE8021X eap=TLS identity="<FQDN>/computers/<Linux computer name>" client_cert="/etc/ssl/certs/<your authentication certificate name>.pem" private_key="/etc/ssl/private/<your private key name>.pem" }
现在我们必须编辑你的接口文件。按照以下步骤配置你的接口文件:
sudo gedit /etc/network/interfaces
将以下内容粘贴到界面下的文件中
eth0
并保存:# Configure the system to authenticate with WPA-Supplicant on interface eth0 wpa-iface eth0 # In this case we have a wired network: wpa-driver wired # Tell the system we want to use WPA-Supplicant with our configuration file: wpa-conf /etc/wpa_supplicant.conf
下一步是生成并安装证书。我们必须生成一个自签名证书,然后根据我们创建的自签名证书生成证书请求,然后安装证书。
笔记:创建证书时,每当系统要求输入您的姓名时,您都必须提供将进行身份验证的计算机的名称。为了安全起见,我建议使名称与分配给计算机的方式相匹配,包括区分大小写。如果您不确定它是如何分配给您的计算机的,请打开终端并输入主机名。
按着这些次序:
sudo openssl req -x509 -nodes -days
enter in days how long you want the cert valid for
-newkey rsa:1024 -keyoutenter a name for your private key/certificate here
.pem -outenter a name for your private key/certificate here
.pem例子:sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout privcert.pem -out privcert.pem
openssl req -new -newkey rsa:1024 -nodes -keyout
enter a name for your private key here
.pem - outenter a name for your certificate request here
.pem例如:sudo openssl req -new -newkey rsa:1024 -nodes -keyout privkey.pem -out certreq.pem
所有创建的证书都放在您的主目录中 ( /home/<username>
)。下一步是使用上一步中创建的证书请求从您的 CA 请求证书。这需要在 Windows 计算机上完成,因为出于某种原因,Linux 和 Windows 在请求和下载证书时不太兼容;我发现通过电子邮件将证书请求发送给我自己并在 Windows 计算机上执行它更方便。
请按照以下步骤完成证书请求:
- 转到 Linux 计算机上的主目录并找到您的证书请求文件
- 通过电子邮件将文件发送给自己,或者使用文本编辑器(如 gedit)打开文件,然后将请求复制并粘贴到电子邮件中发送给自己。
- 在 Windows 客户端上,使用 IE 打开 CA 的网站网页(例如
http://caname/certsrv
)。 - 选择申请证书
- 高级证书请求
- 现在打开您的电子邮件并获取您自己通过电子邮件发送的证书请求。
- 如果您通过电子邮件将文件发送给自己,请使用记事本打开它,然后将内容复制并粘贴到 Base-64 编码的证书请求框中。如果您通过电子邮件将证书请求文件的内容而不是文件本身发送给自己,则只需将请求从其中复制并粘贴到 Base-64 编码的证书请求框中即可。
- 单击“提交”并以 Base-64 格式(而不是 DER)下载证书。
- 将证书保存到桌面并将其命名为
your Linux machine name
.pem。系统会自动将 附加到.cer
证书末尾,因此只需将其删除即可。Linux 使用 .pem 作为证书扩展名。 - 将此文件通过电子邮件发回给您自己。
- 现在,在您的 Linux 机器上,获取您的证书并将其保存在某个地方(最好是您的主文件夹,以保持内容井然有序)。
- 现在,我们需要将您刚刚收到的证书复制到您的
/etc/ssl/certs
文件夹中,并且我们需要将您之前创建的私钥/证书和私钥复制到您的/etc/ssl/private
文件夹中。现在,只有 root 才有权执行此操作,因此您可以通过键入sudo cp /home/<username>/<certificate>.pem /etc/ssl/private
或 来通过命令行执行此/etc/ssl/certs
操作。这也可以从 GUI 中执行,方法是使用命令 gksudo 并键入 nautilus 进行复制和粘贴。Nautilus 是 Ubuntu 使用的 GUI 文件浏览器,它将以 root 身份运行它,允许您复制并粘贴到只有 root 才有权访问的目录中。
现在我们的证书已经准备好了,我们需要告诉 openssl 如何使用证书。为此,我们必须编辑 openssl.cnf 文件并告诉它将我们的 Linux 机器作为客户端而不是用户进行身份验证。
为此,请按照下列步骤操作:
- sudo gedit /etc/ssl/openssl.cnf
- 向下滚动大约一半,您应该会看到一个名为的部分
[usr_cert]
。在此部分中,我们需要其中nsCertType
定义为“对于普通客户使用来说,这是很典型的”,它应该有,nsCertType = client, email
并且将被注释掉。取消注释此行并删除电子邮件,以便它显示nsCertType = client
。现在保存文件。
现在您应该已经正确配置了所有需要的内容,以便让 Linux 机器在 Windows 域环境中运行并使用 802.1x 进行身份验证。
现在只需重新启动网络服务,以便 Linux 使用wpa_supplicant.conf
现在绑定到接口的文件eth0
并进行身份验证。因此只需运行sudo service networking restart
。如果接口恢复后未获取 IP 地址,您可以通过键入 手动从 DHCP 服务器请求 IP sudo dhclient
。