小编Nih*_*mar的帖子

已成功与服务器建立连接,但登录过程中发生错误。目标主体名称不正确

我使用 openssl 创建了三个证书

  1. 根CA证书
  2. 服务器证书
  3. 客户证书

服务器端配置:

我在服务器计算机上安装了 server.cer(个人文件夹)和 RootCA(信任根证书颁发机构文件夹)。然后我将服务器证书附加到 MSSSQL(SQL 配置管理器 -> MSSQL 属性 -> 证书下拉列表)。将“强制加密”设置为“否”并重新启动服务。

客户端配置:

我安装了client.cer(个人文件夹)和RootCA(信任根证书颁发机构文件夹)。

以下是创建 RootCA(CertAuthority) 以及 server.cert 和 client.crt 的步骤:

openssl genrsa -des3 -out CertAuthority.key 4096
openssl req -new -x509 -days 3650 -key CertAuthority.key -out CertAuthority.crt
openssl req -new -sha256 -key CertAuthority.key -out server.csr
openssl x509 -req -days 3650 -in server.csr -CA CertAuthority.crt -CAkey CertAuthority.key -set_serial 01 -out server.crt
openssl req -new -sha256 -key CertAuthority.key -out client.csr
openssl x509 -req -days 3650 …
Run Code Online (Sandbox Code Playgroud)

c# encryption ssl kerberos sql-server-2008-r2

6
推荐指数
1
解决办法
9772
查看次数

shared_ptr 的移动语义

我刚开始学习智能指针,遇到了一个似乎与理论相矛盾的情况。例如,当我们使用 shared_ptr 并且如果调用复制语义时,对象共享所有权并且引用计数为 2。这是可以理解的。例如代码。

 class Test {
    public:
    Test(){ cout << "Const" << "\n"; }

    void Disp(){
        cout << "Class Test()\n";
    }

    ~Test(){ cout << "Dest" << "\n"; }
 };

int main()
{
 Test *p = new Test();
 shared_ptr<Test> p1(p);
 shared_ptr<Test> p2(p1); // = make_shared<Test>(*p1);

 p1->Disp();
 p2->Disp();

}
Run Code Online (Sandbox Code Playgroud)

输出很好,因为:

Const
Class Test()
Class Test()
Dest
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试将语义移动为

int main()
{
 Test *p = new Test();
 shared_ptr<Test> p1(p);
 shared_ptr<Test> p2 = make_shared<Test>(*p1);

 p1->Disp();
 p2->Disp();

}
Run Code Online (Sandbox Code Playgroud)

那么 p1 应该已经失去了所有权。因此 p1->Disp() 应该是有效的。因为 make_shared 将转移所有权并重置 …

c++ shared-ptr boost-smart-ptr c++11

-1
推荐指数
1
解决办法
56
查看次数