intel机器安装Data Center Attestation Primitives(Intel® SGX DCAP)教程
由于intel发邮件说这个EPID认证2025年四月份就不给用了,建议咱这些用EPID的原始人把服务的认证模式迁移到DCAP,今天来尝试对DCAP的探索,关于DCAP的逻辑和知识我在这里不做多叙述。我是装完了之后才想起要写点儿什么的,这儿就描述一下我的安装过程和碰到问题,这里只是对我安装的过程的一个记录,具体的安装过程还请遵循linux-sgx的README。
我的机器的配置:
CPU | 64 Intel® Xeon® Silver 4314 CPU @ 2.40GHz |
---|---|
操作系统 | Ubuntu 22.04.4 LTS |
内核版本 | 6.5.0-18-generic |
BIOS | 国产的宝德 |
以下是我参阅的教程:
- https://download.01.org/intel-sgx/sgx-dcap/(这是所有版本的归档,你可以选择最新版本,里面会有教你怎么安装)
- https://download.01.org/intel-sgx/sgx-dcap/1.20/linux/docs/Intel_SGX_SW_Installation_Guide_for_Linux.pdf
- https://github.com/intel/linux-sgx/blob/master/README.md
安装intel driver
操作系统内核版本超过5.11之后,就不用去特意装sgx驱动了,把BIOS的sgx选项调成——由软件启动之后,使用sgx-enable项目将你的sgx驱动激活之后,重启你的instance,你的/dev/路径下就有:sgx_enclave、sgx_provision、sgx_vepc这三个东西了,代表你的计算机支持运行sgx程序,而且驱动激活了,这里不做过多教程。
安装intel sdk & psw
安装这部分内容跟随着教程https://github.com/intel/linux-sgx/blob/master/README.md
README文件比较长,但是核心就是:
-
0、介绍以及告诉你安装这个东西的需求。
-
1、从源码自己编译出sdk和psw的安装包。
-
2、使用安装包下载sdk和psw。
-
3、安装DCAP的PCS
我们直接先看Install the Intel® SGX SDK和Install the Intel® SGX PSW章节。
安装intel sdk
可以直接在下载intel sdk的installer在你某个路径下
首先先下载必要的依赖
sudo apt-get install build-essential python-is-python3
下载installer
wget https://download.01.org/intel-sgx/latest/linux-latest/distro/ubuntu22.04-server/sgx_linux_x64_sdk_2.23.100.2.bin
#开始安装并选择路径,我推荐放在/opt/intel/底下
./sgx_linux_x64_sdk_2.23.100.2.bin
source /opt/intel/sgxsdk/environment
下载linux-sgx项目,完成后使用模拟模式运行一下试例
cd /home/Chiang
git clone https://github.com/intel/linux-sgx.git
cd /opt/intel/sgxsdk/SampleCode/LocalAttestations
make SGX_MODE=SIM
cd bin
./app
若输出success有关信息,证明sdk下载成功。
你如果使用的是Ubuntu 22.04或者任何带有 systemd v248或更高版本的操作系统,/dev/sgx_enclave(这个是inkernel的sgx驱动)只能由“sgx”组中的用户访问,所以你要把你的用户加入sgx组。
# 查看systemd的版本:
systemctl --version
# 把你的user放入sgx组
sudo usermod -a -G sgx <user name>
安装intel psw
安装相关依赖项
sudo apt-get install libssl-dev libcurl4-openssl-dev libprotobuf-dev
然后安装真正的intel psw
sudo apt-get install libsgx-launch libsgx-urts
sudo apt-get install libsgx-epid libsgx-urts
sudo apt-get install libsgx-quote-ex libsgx-urts
sudo apt-get install libsgx-dcap-ql
这里遇到几个问题,第一个是:
-
找不到目标包
Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package libsgx-dcap-ql ....
我们执行以下三条:
echo 'deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main' | sudo tee /etc/apt/sources.list.d/intel-sgx.list wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add sudo apt-get update
-
没有libprotobuf17这个包
The following packages have unmet dependencies: libsgx-epid : Depends: libprotobuf17 but it is not installable Recommends: libsgx-aesm-epid-plugin (>= 2.23.100.2-focal1) but it is not going to be installed libsgx-quote-ex : Depends: libprotobuf17 but it is not installable Recommends: libsgx-aesm-quote-ex-plugin (>= 2.23.100.2-focal1) but it is not going to be installed E: Unable to correct problems, you have held broken packages.
我们安装对应的依赖
wget http://archive.ubuntu.com/ubuntu/pool/main/p/protobuf/libprotobuf17_3.6.1.3-2ubuntu5_amd64.deb sudo dpkg -i libprotobuf17_3.6.1.3-2ubuntu5_amd64.deb
解决了这两个问题之后,再重新执行上面对psw的安装即可,安装成功后硬件模式运行samplecode的能力就解锁了,我们可以去试一试
cd /opt/intel/sgxsdk/SampleCode/LocalAttestation
make
cd bin
./app
输出的日志出现success证明安装成功。
ECDSA attestation和的安装PCS/PCCS
我是跟着:https://download.01.org/intel-sgx/sgx-dcap/1.20/linux/docs/Intel_SGX_SW_Installation_Guide_for_Linux.pdf的appenddix2教程来的,当然也可以看一下github的:https://github.com/intel/SGXDataCenterAttestationPrimitives/tree/master/QuoteGeneration/pccs
-
安装nodejs
这里官方文档是有问题的我踩了雷,让我直接去官网下载nodejs,大于18.17版本的都OK我照做了,结果下了个21.xx版本的,然后执行了下一步…
-
快捷安装sgx-dcap-pccs
sudo apt-get install sgx-dcap-pccs
***NOTE:***这里要注意如果你是下载的最新的nodejs,那么你大概率会出现我这样的错误
没搞过我蒙逼了一下,然后尝试切换nodejs的版本:
(1)先下载nvm:
(2)然后切换nodejs的版本:
(3)重新选择再进行./install.sh,看来是nodejs版本的问题…接着可以开始配置了,具体怎么配置可以看文档
(4)执行完这一步使用命令检查服务状态
sudo systemctl status pccs
发现pccs服务并没有正常启动,于是检查启动日志
tail -f /opt/intel/sgx-dcap-pccs/logs/pccs_server.log
发现在不停输出同一个错误日志:The private key or certificate for HTTPS server is missing.这个日志输出的代码在[这里]( logger.error(‘The private key or certificate for HTTPS server is missing.’)😉,判断一下是因为这个服务启动的时候选择了使用’insecure HTTPS’也就是自签名的证书作为TSL,目前程序是没有找到这个自签名证书和私钥。
于是检查了一下这个证书有没有生成:
ll /opt/intel/sgx-dcap-pccs/ssl_key total 20 drwxr-xr-x 2 pccs pccs 4096 Mar 14 09:25 ./ drwxr-xr-x 20 pccs pccs 4096 Mar 15 03:59 ../ -rw-r--r-- 1 pccs pccs 1005 Mar 14 09:25 csr.pem -rw-r--r-- 1 pccs pccs 1082 Mar 14 09:25 file.crt -rw------- 1 pccs pccs 1704 Mar 14 09:20 private.pem
发现是有的,检查/opt/intel/sgx-dcap-pccs/ssl_key发现还有个startup.sh脚本,使用一下在重启pccs后,服务正常启动
./startup.sh systemctl restart pccs ##查看启动日志 [info]: HTTPS Server is running on: https://localhost:8081
则证明安装成功
试试有无成功:
curl -kv https://localhost:8081 #然后查看一下日志有无更新 systemctl status pccs
24/06/12更新,PCCS的安装依赖特定的nodejs版本
这两天在一台新的机器上想安装一个PCCS,结果发现使用sudo apt-get install sgx-dcap-pccs命令安装已经会提示nodejs版本不正确的错误了,而且你使用该命令安装的时候还会贴心的给你安装node的环境。但是要命的是,他会根据你/etc/apt/sources.list的版本给你安装node的最新版本,而适配PCCS的node的版本只有他提示里面的那几种,而那几种可行的版本并不能直接通过官方README教程简单的下载到,以下是下载方法:
##先下载node命令,我选择了一个20.10.0版本,下载地址:https://nodejs.org/dist/
cd /root
wget https://nodejs.org/dist/v20.10.0/node-v20.10.0-linux-x64.tar.gz
tar -xvf node-v20.10.0-linux-x64.tar.gz
ln -s /root/node-v20.10.0-linux-x64/bin/node /usr/bin/node
node -v
下载完成node之后还不够,这个intel pccs说需要有个nodejs命令,需要下载对应版本,查了才知道这个node和nodejs其实是同一个东西,原因是在有些linux发行版本里面/usr/bin/node这个已经有app使用了,然而可能pccs开发的时候intel用的是nodejs命令,会发生冲突:https://stackoverflow.com/questions/15695914/using-node-to-initialize-scripts-does-not-work-while-nodejs-does
##你可以直接把node软链接到nodejs里面
ln -s /usr/bin/node /usr/bin/nodejs
nodejs -v
##亦或者是官方提供的nodejs的deb包
wget https://deb.nodesource.com/node_20.x/pool/main/n/nodejs/nodejs_20.10.0-1nodesource1_amd64.deb
sudo dpkg -i --force-overwrite nodejs_20.10.0-1nodesource1_amd64.deb
nodejs -v
然后就完成了,可以继续安装pccs了[摊手]