簡介
本檔案介紹如何從Windows私密金鑰基礎架構(PKI)產生和匯出正確憑證,以與Field Network Director(FND)上的即插即用(PNP)結合使用。
問題
嘗試使用PNP在較新的Cisco IOS®和Cisco IOS®-XE版本上執行零接觸部署(ZTD)時,此程式會失敗,並出現以下PNP錯誤之一:
Error while creating FND trustpoint on the device. errorCode: PnP Service Error 3341,
errorMessage: SSL Server ID check failed after cert-install
Error while creating FND trustpoint on the device. errorCode: PnP Service Error 3337,
errorMessage: Cant get PnP Hello Response after cert-install
一段時間以來,Cisco IOS®/Cisco IOS®-XE中的PNP代碼要求在PNP伺服器/控制器(本例中為FND)提供的證書中填寫「使用者替代名稱(SAN)」欄位。
PNP Cisco IOS®代理只檢查證書SAN欄位中的伺服器標識。它不再檢查公用名(CN)欄位。
此版本對以下版本有效:
-
Cisco IOS®版本15.2(6)E2及更新版本
-
Cisco IOS®版本15.6(3)M4及更新版本
-
Cisco IOS®版本15.7(3)M2及更新版本
-
Cisco IOS® XE Denali 16.3.6及更新版本
-
Cisco IOS® XE Everest 16.5.3及更高版本
-
Cisco IOS® Everest 16.6.3及更高版本
-
所有Cisco IOS®版本(16.7.1及更高版本)
有關詳細資訊,請訪問:https://www.cisco.com/c/en/us/td/docs/solutions/Enterprise/Plug-and-Play/solution/guidexml/b_pnp-solution-guide.html#id_70663
解決方案
FND的大部分指南和文檔都未提及SAN欄位需要填充。
要建立並匯出用於PNP的正確證書並將其新增到金鑰庫,請執行以下步驟。
使用Windows CA伺服器上的FND/NMS模板生成新證書
導航到「開始」>「運行」>「mmc」>「檔案」>「新增/刪除管理單元……」>「證書」>「新增>電腦帳戶」>「本地電腦」>「確定」,然後開啟證書MMC管理單元。
展開Certificates(Local Computer)> Personal > Certificates
按一下右鍵「Certificates」,然後選擇「All Tasks」>「Request New Certificate...」,如下圖所示。
按一下「Next」,然後選擇「Active Directory Enrollment Policy」,如下圖所示。
按一下「Next」,然後選擇為NMS/FND-server建立的模板(稍後為TelePresence Server(TPS)重複),然後按一下「More Information」連結,如下圖所示。
在證書屬性中,提供以下資訊:
使用者名稱:
- 組織:您的組織名稱
- 公用名:fnd伺服器的完全限定域名(FQDN)(如果適用,則為TPS)
備用名稱(SAN欄位):
- 如果使用域名系統(DNS)來聯絡FND伺服器的PNP部分,請為FQDN新增DNS條目
- 如果使用IP連線至FND伺服器的PNP部分,請為IP新增IPv4專案
建議證書中包括多個SAN值,以防發現方法不同。例如,可以在SAN欄位中同時包含控制器FQDN和IP地址(或NAT IP地址)。如果包含這兩個引數,請將FQDN設定為第一個SAN值,後跟IP地址。
配置示例:
完成後,在「Certificate Properties(證書屬性)」視窗中按一下OK,然後按一下Enroll以生成證書,並在生成完成後按一下Finish。
檢查生成的證書中的SAN欄位
只是為了檢查生成的證書是否包含正確的資訊,您可以按如下方式檢查它:
在Microsoft管理控制檯(MMC)中開啟證書管理單元,然後展開證書(本地電腦)>個人>證書。
按兩下生成的證書並開啟Details頁籤。向下滾動以查詢SAN欄位,如下圖所示。
匯出證書以匯入到FND金鑰庫
在可以匯入或替換FND金鑰庫中的證書之前,需要將其匯出到.pfd文件。
在MMC中的證書管理單元中,展開證書(本地電腦)>個人>證書
按一下右鍵生成的證書,然後選擇「所有任務」>「匯出...」,如下圖所示。
按一下Next,選擇以匯出私鑰,如下圖所示。
選擇該選項以在證書路徑中包含所有證書,如下圖所示。
按一下下一步,選擇匯出密碼並將.pfx儲存到已知位置。
建立與PNP一起使用的FND金鑰庫
匯出證書後,即可構建FND所需的金鑰庫。
將上一步生成的.pfx安全地傳輸到FND伺服器(網路管理系統(NMS)電腦或OVA主機),例如使用SCP。
列出.pfx的內容以瞭解匯出中的自動生成的別名:
[root@iot-fnd ~]# keytool -list -v -keystore nms.pfx -srcstoretype pkcs12 | grep Alias
Enter keystore password: keystore
Alias name: le-fnd-8f0908aa-dc8d-4101-a526-93b4eaad9481
使用以下命令建立新的金鑰庫:
root@iot-fnd ~]# keytool -importkeystore -v -srckeystore nms.pfx -srcstoretype pkcs12 -destkeystore cgms_keystore_new -deststoretype jks -srcalias le-fnd-8f0908aa-dc8d-4101-a526-93b4eaad9481 -destalias cgms -destkeypass keystore
Importing keystore nms.pfx to cgms_keystore_new...
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
[Storing cgms_keystore_new]
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore cgms_keystore_new -destkeystore cgms_keystore_new -deststoretype pkcs12".
在命令中,確保將nms.pfx替換成正確的檔案(從Windows CA匯出),並且srcalias值將與以前命令(keytool -list)的輸出匹配。
生成後,將其轉換為建議的新格式:
[root@iot-fnd ~]# keytool -importkeystore -srckeystore cgms_keystore_new -destkeystore
cgms_keystore_new -deststoretype pkcs12
Enter source keystore password:
Entry for alias cgms successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Warning:
Migrated "cgms_keystore_new" to Non JKS/JCEKS. The JKS keystore is backed up as
"cgms_keystore_new.old".
將之前匯出的CA證書新增到金鑰庫:
[root@iot-fnd ~]# keytool -import -trustcacerts -alias root -keystore cgms_keystore_
new -file rootca.cer
Enter keystore password:
Owner: CN=rootca, DC=fnd, DC=iot
Issuer: CN=rootca, DC=fnd, DC=iot
...
Trust this certificate? [no]: yes
Certificate was added to keystore
最後,將SUDI證書新增到金鑰庫,該證書用於在使用PNP時通過FAR的串列驗證身份。
對於RPM安裝,SUDI證書與軟體包捆綁在一起,可在以下網址找到:/opt/cgms/server/cgms/conf/ciscosudi/cisco-sudi-ca.pem
對於OVA安裝,首先將SUDI證書複製到主機:
[root@iot-fnd ~]# docker cp fnd-container:/opt/cgms/server/cgms/conf/ciscosudi/cisco-sudi-ca.pem .
然後將其新增到金鑰庫中,作為別名SUDI的信任:
[root@iot-fnd ~]# keytool -import -trustcacerts -alias sudi -keystore cgms_keystore_new -file cisco-sudi-ca.pem
Enter keystore password:
Owner: CN=ACT2 SUDI CA, O=Cisco
Issuer: CN=Cisco Root CA 2048, O=Cisco Systems
...
Trust this certificate? [no]: yes
Certificate was added to keystore
此時,金鑰庫已準備好用於FND。
啟用新/修改金鑰庫以用於FND
使用keystore之前,請替換先前版本並更新cgms.properties檔案中的密碼(可選)。
首先,對已經存在的金鑰庫進行備份:
對於RPM安裝:
[root@fndnms ~]# cp /opt/cgms/server/cgms/conf/cgms_keystore cgms_keystore_backup
對於OVA安裝:
[root@iot-fnd ~]# cp /opt/fnd/data/cgms_keystore cgms_keystore_backup
將現有的替換為新版本:
對於RPM安裝:
[root@fndnms ~]# cp cgms_keystore_new /opt/cgms/server/cgms/conf/cgms_keystore
對於OVA安裝:
[root@iot-fnd ~]# cp cgms_keystore_new /opt/fnd/data/cgms_keystore
或者,更新cgms.properties檔案中金鑰庫的密碼:
首先,生成一個新的加密密碼字串。
對於RPM安裝:
[root@fndnms ~]# /opt/cgms/bin/encryption_util.sh encrypt keystore
7jlXPniVpMvat+TrDWqh1w==
對於OVA安裝:
[root@iot-fnd ~]# docker exec -it fnd-container /opt/cgms/bin/encryption_util.sh encrypt keystore
7jlXPniVpMvat+TrDWqh1w==
確保使用正確的金鑰庫密碼替換金鑰庫。
對於基於RPM的安裝,請更改/opt/cgms/server/cgms/conf/cgms.properties中的cgms.properties,對於基於OVA的安裝,請更改/opt/fnd/data/cgms.properties,以便包括新的加密密碼。
最後,重新啟動FND以開始使用新的金鑰庫和密碼。