在Docker容器中运行的SQL Server 2017 Linux映像中创建.cer和.p7b的证书

时间:2018-01-16 16:33:26

标签: docker encryption sql-server-2017

我已下载SQL Server 2017 Linux映像并在Container中运行。 接下来,我已从SQL Server Management Studio 2017连接到容器。 然后我使用了#34; docker cp"将.bak文件复制到" / var / opt / mssql / backup"。

但它需要一个加密密钥才能恢复。

所以在SSMS中我打开容器的查询窗口并运行这些命令:

USE master;
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd';
GO

CREATE CERTIFICATE CertificateName FROM FILE = 'C:\cert.cer' WITH PRIVATE 
KEY (FILE = 'C:\key.p7b', DECRYPTION BY PASSWORD = '********');

当我运行最后一个时,我收到此错误: "证书,非对称密钥或私钥文件无效或不存在;或者您没有权限。"

如何为Docker容器执行此操作? 我可以从本地文件系统获取文件吗? 或者我需要将其复制到" / var / opt / mssql /"并以某种方式从那里开始?

1 个答案:

答案 0 :(得分:1)

Docker显然无法从本地文件系统中读取cer和key文件。 这是我做的:

在命令提示符处,在容器中创建一个dir以容纳密钥。

docker exec -it sqlcontainer1 mkdir /var/opt/mssql/setup
docker cp "C:\Temp\cert.cer" sqlcontainer1:/var/opt/mssql/setup
docker cp "C:\Temp\key.p7b" sqlcontainer1:/var/opt/mssql/setup

然后我又回到SSMS并再次运行命令:

--DROP MASTER KEY

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '********';
GO

CREATE CERTIFICATE CertName FROM FILE = '/var/opt/mssql/setup/cert.cer' WITH 
PRIVATE KEY (FILE = '/var/opt/mssql/setup/key.p7b', DECRYPTION BY PASSWORD = 
'********');