Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何创建防止“服务器模式SSL必须使用带关联私钥的证书”异常的X509证书?

如何创建防止“服务器模式SSL必须使用带关联私钥的证书”异常的X509证书?
EN

Stack Overflow用户
提问于 2017-07-24 05:11:35
回答 1查看 6.4K关注 0票数 0

我正在尝试创建一个X.509证书文件,该文件将使用smtp4dev项目中的以下代码:

代码语言:javascript
运行
AI代码解释
复制
var certificate = new X509Certificate(Settings.Default.SSLCertificatePath);
var clientCertificateRequired = false;
var protocols = SslProtocols.Ssl2 | SslProtocols.Ssl3 | SslProtocols.Tls;
var checkRevocation = false;

var stream = new SslStream(stream);
stream.AuthenticateAsServer(certificate, clientCertificateRequired, protocols, checkRevocation);

Settings.Default.SSLCertificatePath指向一个.cer文件。

无论我尝试什么,这对于带有以下消息的System.NotSupportedException都是失败的:

服务器模式SSL必须使用带有关联私钥的证书。

我在提升的X509会话中使用新-自签署证书 PowerShell CommandLet创建了一个PowerShell证书:

代码语言:javascript
运行
AI代码解释
复制
New-SelfSignedCertificate `
    -DnsName "localhost" `
    -CertStoreLocation "cert:\CurrentUser\My" `
    -FriendlyName "smtp4dev" `
    -TextExtension "2.5.29.37={text}1.3.6.1.5.5.7.3.1" `
    -KeyUsage DigitalSignature,KeyEncipherment,DataEncipherment `
    -Provider "Microsoft RSA SChannel Cryptographic Provider"

我添加了这些选项,以尽可能准确地反映已经存储在我的计算机上的证书,该证书是由IIS Express安装程序生成的。因为那个特殊的证书确实有效,尽管我不知道为什么。

这两个证书都位于Local Computer > Personal证书存储区中。对于这两个证书,证书管理器都提到“您有一个与此证书相对应的私钥”。

当我比较这两个证书的属性时,smtp4dev证书与IIS开发证书有以下三种不同之处(除了拇指打印和序列号):

  • 键使用被标记为关键扩展。
  • 带有值DNS Name=localhost的主题可选名称扩展
  • 带有值e7 12 f5 ...的主题密钥标识符扩展

我使用证书管理器将两个证书导出到我的桌面上,没有私钥作为“Bas-64编码的x.509 (.CER)”文件。(包括私钥将导出格式限制为PKCS #12 (.PFX),smtp4dev不支持该格式。)

以这种方式导出证书之后,当我双击它们时,两者都不会显示关于拥有私钥的消息。

只有IIS速成开发证书在此问题开始时显示的代码中工作。而smtp4dev则不这样做。

我试过的其他事情:

  1. 我经常遇到使用makecert的教程,但我没有那个程序。
  2. 我尝试使用openssl生成的自签名证书,并且只将Common Name设置为localhost,但我得到了相同的异常(“服务器模式SSL必须使用带有关联私钥的证书”)。
  3. 更改代码以使用X509Certificate2并不是一种选择,因为在应用修补程序的情况下获得另一个smtp4dev版本是很费时的,因为项目似乎没有得到积极的开发。
  4. 尝试不同的证书文件格式(例如PFX)实际上是可能的,只要我将文件重命名为.cer,我就可以欺骗smtp4dev使用证书。这允许我在证书中包含私钥。它适用于IIS开发证书的导出,但不适用于smtp4dev证书的导出。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-24 07:21:26

想到的只有一件事:关键提供者兼容性。SslStream似乎不支持CNG (密钥存储提供程序),这是的默认密钥提供程序类型。

我建议在PowerShell调用中显式指定任何遗留提供程序:

代码语言:javascript
运行
AI代码解释
复制
New-SelfSignedCertificate `
    -DnsName "localhost" `
    -CertStoreLocation "cert:\LocalMachine\My" `
    -FriendlyName "smtp4dev" `
    -TextExtension "2.5.29.37={text}1.3.6.1.5.5.7.3.1" `
    -KeyUsage DigitalSignature,KeyEncipherment,DataEncipherment `
    -Provider "Microsoft RSA SChannel Cryptographic Provider"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45281590

复制
相关文章
加密,防止网站证书私钥泄露
黑客就可以构建假冒的钓鱼网站,借助DNS劫持,将用户引导到假网站上面去,可窃取用户的口令等敏感信息;或者黑客执行中间人攻击。
用户U2
2022/06/02
1.1K0
加密,防止网站证书私钥泄露
如何使用SSL证书
SSL证书是用于在WEB服务器与浏览器以及客户端之间建立加密链接的加密技术,通过配置和应用SSL证书来启用HTTPS协议,来保护互联网数据传输的安全,全球每天有数以亿计的网站都是通过HTTPS来确保数据安全,保护用户隐私。
用户8418197
2021/09/05
3.5K0
SSL证书的分类有哪些?如何选择合适的SSL证书?
为了保护网站数据和用户信息,很多企业开始为网站安装SSL证书,有效提升了网站安全性。那么SSL证书的分类有哪些?如何选择合适的SSL证书?
稀糊牛肉粥
2023/09/25
7170
X509证书结构
version [0] EXPLICIT Version DEFAULT v1, --证书版本号
战神伽罗
2020/07/03
1.4K0
Https证书/SSL证书异常导致访问失败该如何解决?
我们在使用SSL证书时,经常会碰到一些常见的SSL证书错误,例如浏览器提示证书无效,证书在地址栏中被红色警告等等。下面是关于SSL证书错误的几种原因及解决方法。
柳絮云泡泡
2023/05/05
5.1K0
Https证书/SSL证书异常导致访问失败该如何解决?
SSL证书创建与部署
SSL证书简介 SSL证书创建 SSL证书部署-Nginx SSL证书部署-Apache SSL证书部署-Tomcat
达达前端
2019/10/28
1.6K0
SSL证书创建与部署
创建本地 LocalHost SSL 证书
程序开发时,避免不了使用https加密通信,可以通过 openssl 工具来生成 ssl 证书,对于不懂的开发来说,openssl 工具是太难使用。有没有一个好用又简单的工具,可以试一试这个用Go语言写的命令行工具:mkcert,非常简单易用。
YP小站
2020/06/04
3.6K0
创建本地 LocalHost SSL 证书
如何为Nginx创建自签名SSL证书
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。 TLS与SSL在传输层对网络连接进行加密。
尘埃
2018/07/20
11.9K0
防止SSL证书泄露你的源站IP
有的时候,我们套CDN是为了保护相对较为脆弱的源站,在CDN上平台上实现对DDoS、CC之类攻击的防护;所以相应的,我们也不希望它被泄露出去,一旦攻击者绕过CDN直接攻击源站,我们在CDN上构建的防御措施便成了摆设,直接快进到“后院起火”。
Yangsh888
2022/03/07
2.5K0
如何购买SSL证书?
互联网在我们的日常生活中已经熟悉的不能在熟悉了,网上购物,在线咨询等已经成为我们习以为常的行为。但这种习惯也同样给我们带来了风险,互联网安全问题越来越受到重视,信息泄露等安全问题已经严重的影响了我们的生活,而SSL证书因此而产生,保护用户数据安全,让数据在传输过程中通过加密来保障信息不被篡改。那么如何购买SSL证书呢?
柳絮云泡泡
2023/03/15
7.1K0
如何购买SSL证书?
如何申请免费的SSL证书
本文提供视频讲解,详细见地址:https://www.bilibili.com/video/BV1BZ4y1G7Uj
研究僧
2020/11/27
23.2K2
如何给服务器安装SSL证书?
如何给服务器安装SSL证书?给服务器安装SSL证书,我们可以使用服务器证书安装配置指南(Apache)的方法来进行。
合信ssl证书
2019/07/20
5.6K0
如何获取ssl证书
在前面的文章中,我们分析了SSL/TLS的一些基本概念和为什么他们安全,尤其提到了公钥和私钥的概念,还有一个很重要的文件,就是CA证书,关于CA证书的官方解释,可以参考百科的解释,这里我们可以简单的认为,CA证书是一个网站的 二维码,这个二维码包括了服务器的一些信息,比如服务器所在的组织、支持的加密算法,还有更重要的公钥信息。
用户8418197
2021/12/08
3.9K0
HTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSL证书实战
对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好。 http协议没有任何的加密以及身份验证的机制,即时是token认证,也非常容易遭遇窃听、劫持、篡改,因此会造成个人隐私泄露,恶意的流量劫持等严重的安全问题。
麦克劳林
2019/12/23
27.6K0
MySQL管理——网络传输安全
数据库会遭受多种攻击方式,例如,SQL注入、利用缓冲区错误、暴力破解、及网络窃听等等。这一篇主要介绍关于MySQL如何防止网络窃听的方法。
MySQLSE
2023/09/12
3440
MySQL管理——网络传输安全
没苹果电脑创建ios私钥证书的流程
开发h5应用,打包的时候需要ios私钥证书,还需要证书profile文件,但是这两个文件需要苹果电脑才能生成。其实可以不用苹果电脑来生成,可以使用香蕉云编来生成。
用户10652049
2023/07/10
5770
没苹果电脑创建ios私钥证书的流程
国密SSL证书与国际SSL证书的区别
随着数字安全的重要性日益凸显,SSL证书在保护数据传输和网站安全方面发挥着关键作用。国密SSL证书和国际SSL证书是两种不同类型的证书,本文将探讨这两者之间的区别,帮助您了解在不同情境下应该选择哪种类型的SSL证书。
涂样丶
2023/10/25
1.4K0
国密SSL证书与国际SSL证书的区别
Proxmox使用自己的SSL证书
用户2135432
2023/10/21
5260
EV证书:级别最高的SSL证书
在当今数字化时代,保护网站和用户数据的安全应该是网站最重要的功能。EV(Extended Validation)证书是一种高级别的SSL证书,提供了更强的身份验证和在线安全保障。
稀糊牛肉粥
2023/10/18
5090
网站证书(SSL域名证书)常见格式使用
1.Tomcat、Weblogic、JBoss等系统是使用Java提供的密码库。通过Java的Keytool工具,生成Java Keystore(JKS)格式的证书文件。Tomcat7开始支持PFX格式证书
跟着阿笨一起玩NET
2021/03/04
8.7K0

相似问题

SslStream.AuthenticateAsServer异常-服务器模式SSL必须使用带有关联私钥的证书。

12

在TLS握手期间,服务器模式SSL必须使用具有关联私钥的证书

37

C# SSL服务器模式必须使用带有相应私钥的证书。

12

X509Certificate2服务器模式SSL必须使用带有关联私钥的证书。

16

如何从SSL证书创建私钥?

113
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档