设置 BGP 消息摘要 5 (MD5) 认证密钥
边界网关协议 (BGP) 认证是一个附加的安全层,仅当路由器能够基于密钥验证其是否与可信源通信时,它才能共享信息。 BGP 同级之间的 TCP MD5 认证会验证通过 BGP 会话发送的每条传输消息。
BGP 认证需求
确保遵循以下 BGP MD5 认证需求:
-
BGP MD5 密钥必须创建为已导入的 type-standard key (不是根密钥)。 您提供的密钥资料必须是 base64-encoded,并且原始字符串的最大长度不能超过 126 个可打印 ASCII 字符。 有关更多信息,请参阅 创建 base64-encoded 加密密钥。
密钥资料必须为 base-64-encoded,并且最多可以为 7,500 字节。 密钥名称 (与密钥材料不同) 是便于识别密钥的唯一人类可读名称。
-
在已认证的 BGP 会话期间,必须使用相同的密钥配置 BGP 同级以建立 BGP 邻居关系。 使用其他密钥配置的路由器无法维护 BGP 邻居关系。
设置 BGP MD5 认证密钥
您可以将密钥存储在 Key Protect 或 Hyper Protect Crypto Services (HPCS) 中。 要配置 BGP MD5 认证,请执行以下步骤:
-
使用密钥设置密钥库实例。 有关指示信息,请参阅 Key Protect: 加密密钥入门 或 HPCS: 创建和导入加密密钥。
如果使用 HPCS,请务必注意,对于标准密钥,
"extractable": <key_type>
值设置为true
。 -
为 Direct Link创建加密密钥后,请使用 IBM Cloud Identity and Access Management (IAM) 在实例与 Direct Link 服务之间授予授权。 您可以在实例级别授予访问权,这将授予 Direct Link 服务对该实例中所有密钥的访问权。 您还可以逐个密钥地授予访问权。 有关指示信息,请参阅 使用授权在服务之间授予访问权。
如果使用 Key Protect,请在选择 Direct Link 作为源服务后选择 基于所选属性的资源。 然后,选择 资源类型> Direct Link Connect 或 资源类型> Direct Link Dedicated,然后选择 Key Protect 作为目标服务。
您应该授予对实例中所有密钥的访问权; 否则,每次要对 Direct Link使用其他密钥时,都必须授予新的服务到服务授权。 只要网关正在使用密钥,就不应将其删除,也不应撤销服务到服务授权。
-
如果 Key Protect 或 HPCS 实例具有基于上下文的限制 (CBR) 规则,那么必须将 Direct Link 服务引用添加到该规则的网络区域。 有关指示信息,请参阅 Direct Link 如何与基于上下文的限制集成。
创建 base64-encoded 加密密钥
本部分描述了如何对密钥值进行 base64 编码以正确创建密钥。 以下示例显示如何使用操作系统上随时可用的实用程序来接收编码的密钥字符串。
您可以使用许多工具对密钥资料进行 base64 编码。 例如,要使用 OpenSSL 来创建和编码新的或现有的密钥资料,请参阅 Hyper Protect Crypto Services 或 Key Protect 文档。
Windows 用户
您可以使用 Powershell 对密钥资料进行 base64-encode。
键字符串输入
要对原始密钥字符串进行编码,请首先使用 UTF-8 编码将该字符串转换为字节。 然后,将字节转换为 base64-encoded 字符串:
$KEY_VALUE = "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
$ENCODED_KEY = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($KEY_VALUE))
要验证该值是否已正确编码,请将 $ENCODED_KEY
变量打印到控制台:
Write-Output $ENCODED_KEY
输出: YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OQ==
密钥文件输入
要将密钥字符串从文件编码为其 base64 值,请首先获取该文件的内容。 然后,使用 UTF-8 编码将内容转换为字节。 然后,您可以使用与键字符串输入相同的方法将字节转换为 base64-encoded 字符串:
$KEY_FILE = "c:\path\to\file\key.txt"
$KEY_VALUE = get-content $KEY_FILE
$ENCODED_KEY = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($KEY_VALUE))
再次通过记录 $ENCODED_KEY
值进行验证:
Write-Output $ENCODED_KEY
输出: YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OQ==
MacOS 和 Linux 用户
您可以使用 bash shell 中提供的 base64
实用程序来 base64-encode 密钥资料。
键字符串输入
要使用 base64
将原始字符串编码为其 base64 值,请将该字符串作为实用程序的输入。 使用 printf
可避免添加换行符:
KEY_VALUE="abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
printf '%s' $KEY_VALUE | base64
输出: YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OQ==
密钥文件输入
要将密钥字符串从文件编码为其 base64 值,请先获取文件内容,然后除去任何新行。 然后,将此值用管道连接到 base64
实用程序。 同样,请使用 printf
以避免添加换行符:
KEY_FILE="path/to/file/key.txt"
KEY_VALUE=$(tr -d '\n' < $KEY_FILE)
printf '%s' $KEY_VALUE | base64
输出: YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OQ==