我正在玩一群相互连接的“节点”,我真正关心的是它们彼此安全连接并且都经过身份验证。
为此,我认为 TLS 模块非常适合。我创建了一个 CA 并签署了一堆证书,每个节点一个。然后我遇到了一个问题,即现在针对节点连接的主机验证证书。
是否可以以某种方式禁用或解决通用名称验证?
这个设置有什么根本性的缺陷吗?
我是否正确,只要这些证书由我的 CA 签名,连接就应该是安全的,并且我确定只有我的节点可以连接?
必须签署锁定到主机名或 IP(或多个接口的情况下的多个)的证书似乎只是一种烦恼。我了解到验证主机的要求实际上不是 TLS 的一部分,而是 HTTPS - 从这个角度来看,默认情况下这样做可能是 Node.js 的错误?
我正在尝试创建一个密钥库,该密钥库的扩展名为现有证书文件中的 jks。使用我拥有的 (CERT) 证书文件,如何使用 Java 密钥工具创建密钥库 (JKS)?
服务器给了我一个customer.pem
我应该使用的客户端证书。如果我在文本编辑器中打开它,它包含客户端证书和客户端密钥:
-----BEGIN RSA PRIVATE KEY-----
here is private key
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
here is certificate
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
但根据 PHP curl 文档,有两个单独的选项用于设置客户端证书和私有客户端密钥:
CURLOPT_SSLCERT The name of a file containing a PEM formatted certificate;
CURLOPT_SSLKEY The name of a file containing a private SSL key;
Run Code Online (Sandbox Code Playgroud)
拥有customer.pem
包含证书和私钥的文件 - 我可以仅设置CURLOPT_SSLCERT
选项吗?CURL 会自动读取客户端密钥并正确使用它吗?就像下面这样:
$curl_opt = array(
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_SSL_VERIFYPEER => 1,
CURLOPT_SSLCERT => $cert_dir . 'customer.pem',
CURLOPT_CAINFO => $cert_dir . 'ca.crt',
CURLOPT_SSLCERTPASSWD => $extra_settings['certificate_password'], …
Run Code Online (Sandbox Code Playgroud) Java 8u181 引入了一项更改,在使用 Java JNDI LDAP API 连接到 LDAPS (TLS) 服务器时启用证书主机名验证。
请参阅: https: //www.oracle.com/technetwork/java/javase/8u181-relnotes-4479407.html#JDK-8200666
如何禁用此主机名验证,或者更好地指定自定义 javax.net.ssl.HostnameVerifier 类。Oracle 的文档仅指定了一个 Java 环境属性来禁用验证,但没有指出任何有问题地完成此操作的方法,这对于不(或不希望)能够更改其所在 JVM 的位/开关的环境至关重要继续运行。
这个问题: 如何禁用java 1.8.181版本的端点识别 提出了类似的问题,但解决方案是通过命令行更改java环境。我问如何在没有环境切换的情况下以编程方式完成它。
还有其他关于在 Java 中禁用其他类型 SSL 连接的主机名验证的问题/答案,但这些答案不适用于 JNDI LDAP API。
当我运行 Windows 更新并 sysprep 我的 Amazon EC2 实例 (Windows Server 2016) 时,我必须创建一个新的自签名证书。然后,我可以在管理服务屏幕中选择 SSL 证书(我将其命名为 WebDeploy)。我已经弄清楚如何从 Windows Powershell 创建 SSL 证书,但我必须从屏幕截图的下拉列表中选择 SSL 证书。如何从命令行设置 SSL 证书?
这是我尝试过的方法,但没有成功 - 我能够避免错误,但如果我不进入 IIS 管理器屏幕并手动选择下拉列表,它们都不允许 WebDeploy 工作。
Stop-Service wmsvc
$strGuid = New-Guid
Import-Module WebAdministration
Remove-Item -Path IIS:\SslBindings\0.0.0.0!8172
Get-Item -Path "cert:\localmachine\my\$strHashThumbprint" | New-Item -Path
IIS:\SslBindings\0.0.0.0!8172
Start-Service wmsvc
Run Code Online (Sandbox Code Playgroud)
而且,这不起作用:
Stop-Service wmsvc
netsh http delete sslcert ipport=0.0.0.0:8172
netsh http add sslcert ipport=0.0.0.0:8172 certhash=$strHashThumbprint appid=`{$strGuid`} certstorename="MY" sslctlstorename="MY"
Start-Service wmsvc
Run Code Online (Sandbox Code Playgroud)
最后,这不起作用:
Stop-Service wmsvc
Add-NetIPHttpsCertBinding -IpPort "0.0.0.0:8172" -CertificateHash $strHash -CertificateStoreName "My" -ApplicationId …
Run Code Online (Sandbox Code Playgroud) 我用 C# 编写了自己的网络服务器。
我总是在端口 443 上的新 IP 中为我的网站建立 SSL 证书。并且始终工作正常。
但这一次我得到了这个错误:
安全连接失败
连接 www.sayehrooshan-co.com 时发生错误。SSL 收到的记录超出了最大允许长度。错误代码:
SSL_ERROR_RX_RECORD_TOO_LONG
由于无法验证接收到的数据的真实性,因此无法显示您尝试查看的页面。请联系网站所有者以告知他们此问题。
这是页面地址:
https://www.sayehrooshan-co.com
这是我的代码始终与其他站点的 .pfx 文件一起使用:
sslstream = new SslStream(new NetworkStream(mySocket, false), false);
//commented for nedaye arzhang
X509Certificate2 serverCertificate = new X509Certificate2(Path, Password);
//X509Certificate2 serverCertificate = new X509Certificate2("www_nedaye-arzhang_com.cer");
sslstream.AuthenticateAsServer(serverCertificate, false, System.Security.Authentication.SslProtocols.Tls, true);
Run Code Online (Sandbox Code Playgroud)
搜索了很多但没有得到任何解决方案有人知道吗?
我需要你的帮助来在我的本地计算机上使用 Nginx 和 SSL“假”证书设置我的 Laradock(带有 Docker)。
我不知道如何设置它。请你帮助我好吗?
谢谢
我在 AWS EC2 服务器上有一个 nodejs/express api,带有每 3 个月由 Let's encrypt 生成的 ssl 证书。自动续订未开启,我们在尝试续订之前让它过期,但在续订后我们收到一条错误消息:
无法验证第一个证书
或者
UNABLE_TO_VERIFY_LEAF_SIGNATURE
取决于我们测试的内容。
我们使用Certbot
以下命令(而不是$ certbot renew
)进行更新:
$ sudo certbot certonly --dns-route53 -d *.example.com -d example.com --server https://acme-v02.api.letsencrypt.org/directory
Run Code Online (Sandbox Code Playgroud)
证书按预期生成,有效期为 3 个月后。
对发生的事情有什么想法吗?我已经尝试了在 SO 和其他地方可以找到的大部分内容,但没有任何效果。
PS 服务器和我相处得不太好:/(我做移动应用程序开发)所以假设我在回复时什么都不知道:D
我正在尝试通过 SSL 为我的 Spring 启动应用程序保护与 AWS RDS 实例的连接。我查看了几个博客和官方文档,并相应地修改了我的连接字符串以包含与 SSL 连接相关的某些参数。
我将我的证书放置在资源中的证书文件夹中。以下是我尝试传递证书路径的方法:
jdbc:postgresql://myamazondomain.rds.amazonaws.com:5432/db_name?sslmode=verify-full&sslrootcert=/cert/rds-ca-cert_name.p12&password=my_passwrord
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
jdbc:postgresql://myamazondomain.rds.amazonaws.com:5432/db_name?sslmode=verify-full&sslrootcert=/src/main/resources/cert/rds-ca-cert_name.p12&password=mypassword
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试从 ECS 容器连接到 RDS 时,收到以下错误:
ERROR com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Exception during pool initialization.
org.postgresql.util.PSQLException: Could not open SSL root certificate file /cert/rds-ca-cert_name.p12.
at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:120)
at org.postgresql.core.SocketFactoryFactory.getSslSocketFactory(SocketFactoryFactory.java:61)
at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:33)
at org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:435)
at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:94)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
at org.postgresql.Driver.makeConnection(Driver.java:454)
Run Code Online (Sandbox Code Playgroud)
有人可以建议这里有什么错误吗?将类路径中存储的证书传递给 jdbc 连接字符串的正确方法是什么?
ssl-certificate ×10
ssl ×7
java ×2
node.js ×2
amazon-ec2 ×1
amazon-rds ×1
apache-nifi ×1
c# ×1
certbot ×1
certificate ×1
curl ×1
docker ×1
iis ×1
jdbc ×1
keytool ×1
laradock ×1
ldap ×1
lets-encrypt ×1
nginx ×1
php ×1
postgresql ×1
powershell ×1
webdeploy ×1