Cinder对接netapp存储使用https协议时,c-vol.log日志里会提示[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed,这是因为https会做ssl认证。对于这个问题,网络上常见的解法是修改驱动代码,绕过ssl:在文件 volume/drivers/netapp/dataontap/client/api.py 添加
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
另外则是使用工具生成自签名证书,导入到cinder服务器和netapp服务器上。Netapp现在能支持单向验证和双向验证两种模式,用配置项可以控制。
这里我们讨论单向验证。步骤如下:
一、创建根证书CA
- 我们要用到easy-rsa工具。安装指令:
Ubuntu:sudo apt-get –y install easy-rsa
Centos:sudo yum install easy-rsa - 进入root模式:sudo –i
- [root@localhost ~]# cd /usr/share/easy-rsa/2.0/
- [root@localhost 2.0]# . vars
- *[root@localhost 2.0]# ./build-ca *
这一步按照提示输入,全部回车使用默认值即可,但是Common Name要填写netapp SVM的ip地址。如下:
Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:172.24.3.25
Name [EasyRSA]:
Email Address [me@myhost.mydomain]:
- 生成Diffie-Hellman参数
[root@localhost 2.0]# ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..............................................................++*++*
二、创建SVM服务端证书和私钥。Netapp上每个SVM都有对应的证书。Netapp应该是根据我们登录动作用到的ip、用户名来判断要管理哪个svm,进而使用哪个对应的证书。我们登录netapp管理页面,用到的用户名admin是集群管理员,对应netapp2650这个svm,用到的证书就是是netapp2650的证书。
创建步骤如下:
- [root@localhost 2.0]# ./build-key-server 172.24.3.25
172.24.3.25是服务端ip。这一步按照提示输入,全部回车使用默认值即可,但是Common Name要填写netapp主机的ip地址。如下:
Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:
Common Name (eg, your name or your server's hostname) [172.24.3.25]:172.24.3.25
Name [EasyRSA]:
Email Address [me@myhost.mydomain]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
注意:这里可能会创建失败提示failed to update database TXT_DB error number 2,这是因为之前已经生成过同名的证书的了,可以执行./clean-all清除,然后从第一步再做一遍。
- 检查keys目录是否有172.24.3.25.crt、172.24.3.25.key、ca.crt三个文件。
172.24.3.25.crt是服务器证书,172.24.3.25.key是服务器私钥,ca.crt是根证书。 - 补充:创建客户端证书的指令,使用单向验证的时候请跳过此步骤。
[root@localhost 2.0]# ./build-key 172.24.2.105
172.24.2.105是客户端ip。
三、安装根证书在cinder服务器上,并加入信任列表
- 要使用工具ca-certificates
Centos:sudo yum install ca-certificates
Ubuntu: - 把上面生成的ca.crt复制到目录/etc/pki/ca-trust/source/anchors/
- 执行指令 update-ca-trust 即安装成功。这条指令不会打印执行结果,我们可以查看/etc/pki/tls/certs/ca-bundle.crt这个文件里是否已经添加了ca.crt的内容。
comm -1 /etc/pki/tls/certs/ca-bundle.crt /usr/share/easy-rsa/2.0/keys/ca.crt
备注:
comm 命令参数
-1 不显示只在第1个文件里出现过的列。
-2 不显示只在第2个文件里出现过的列。
-3 不显示只在第1和第2个文件里出现过的列。
四、将服务器证书、服务器私钥和根证书导入到netapp svm
用admin用户ssh连接到netapp集群管理的命令行界面上。
[root@localhost 2.0]# ssh admin@172.24.2.50查看svm的证书。
NetApp2650::> security certificate show -vserver wy_fc_svm_test删除svm的证书。
NetApp2650::> security certificate delete -vserver wy_fc_svm_test *导入证书
NetApp2650::> security certificate install -vserver wy_fc_svm_test -type server
提示Please enter Certificate: Press <Enter> when done,这里输入之前生成的服务器证书172.24.3.25.crt里的内容,从-----BEGIN CERTIFICATE----- 到-----END CERTIFICATE-----。
如:
Please enter Private Key: Press <Enter> when done,这里输入之前生成的服务器私钥172.24.3.25.key里的内容,从-----BEGIN CERTIFICATE----- 到-----END CERTIFICATE-----。
如:
Do you want to continue entering root and/or intermediate certificates {y|n}: y
Please enter Intermediate Certificate: Press <Enter> when done
这里输入根证书ca.crt里的内容。如下:
- 使导入证书生效
NetApp2650::> security ssl modify -vserver wy_fc_svm_test -server-enabled true -common-name 172.24.3.25 -ca 172.24.3.25 -serial 02
这里的-common-name、-ca、-serial可以敲击tab按键自动填入。
6.导入客户端证书,如使用单向验证,请忽略此步。
NetApp2650::> security certificate install -vserver NetApp2650 -type client-ca
开启客户端验证,使客户端证书生效。
NetApp2650::> security ssl modify -client-enabled true -vserver NetApp2650 -common-name 172.24.2.50 -ca 172.24.2.50 -serial 01
五、使用openssl工具测试https,看证书是否导入成功。
[root@localhost ~]# openssl s_client -connect 172.24.3.25:443 -CApath /etc/pki/ca-trust/source/anchors/ca.crt
抓包分析tcpdump -s0 -w net4.pcap -i enp8s0f0 host 172.24.2.105
SSL双向验证报文分析可以阅读这篇博客http://blog.csdn.net/fw0124/article/details/40983787
NetApp CLI 指令简单补充
上面的操作步骤已经介绍了几个常用指令,这里我再说几个相关知识。
登录Data ONTAP 命令行界面 (CLI) ,你可以使用命令行管理 Storage Virtual Machine (SVM)。命令行界面提供了与 UNIX tcsh Shell 相似的基于命令的管理机制。您可在存储系统提示符处输入命令,而命令结果将以文本显示。命令行界面的命令提示符显示为vserver_name::>。
- 命令行界面中的命令按命令目录组织成层次结构。您可以通过输入完整命令在若干个命令目录中导航。例如,您可以通过在提示符处输入volume show命令来显示有关卷的信息。您也可以一次浏览一个命令目录来运行命令,如:
- 问号(“?”)用于显示帮助信息的命令。
如:
- 您可以使用top命令转到命令层次结构的顶级,以及使用up命令或..命令转到命令层次结构中的上一级。
- 每个命令行界面会话都会保留一份在会话期间发出的所有命令的历史记录。使用history命令查看命令历史记录。使用redo命令重新执行命令,如可使用redo 4命令重新发出历史记录列表中的第四个命令;使用redo -2命令重新发出在运行两个命令之前运行的命令。
- 查看有关 SVM 的基本信息NetApp2650::> vserver show
查看有关 SVM 的详细信息NetApp2650::> vserver show -instance - 查看 SVM 的 LIF 用 network interface show
这里我仅仅简单介绍下netapp cli指令,其他详细指令请查询:
《集群模式 Data ONTAP 8.3 SVM 管理员系统管理指南》