我先解释一下我的问题.我从CA购买了证书,并使用以下格式生成csr和私钥:
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
Run Code Online (Sandbox Code Playgroud)
当我打开server.key文件时,我看到它以"----- BEGIN PRIVATE KEY -----"开头
我在我的服务器上使用SSL证书,一切看起来都很好.
现在我想将相同的证书上传到AWS IAM,以便我可以将它用于beanstalk负载均衡器.我使用此aws文档中的以下命令http://docs.aws.amazon.com/IAM/latest/UserGuide/InstallCert.html#SubmitCSRCertAuth
iam-servercertupload -b public_key_certificate_file -k privatekey.pem -s certificate_object_name
Run Code Online (Sandbox Code Playgroud)
我根据需要更改了证书文件名,但不断收到此错误:"400 MalformedCertificate Invalid Private Key".
有趣的是,在aws doc页面上,他们显示的示例私钥以"-------开始RSA私钥--------"开头
有没有办法使用openssl将我的私钥转换为RSA私钥?
我正在尝试在我在Amazon AWS上设置的新负载均衡器上安装GoDaddy SSL证书.我最初在Godaddy使用keytool程序在Glassfish 3.1服务器(Amazon linux ami)上直接安装创建了证书.我没有问题直接在服务器上进行设置.我现在需要将证书从Web服务器移动到新的负载均衡器.亚马逊要求私钥和证书采用PEM格式,因此我使用GoDaddy的"重定密钥"工具来创建新的证书.当我在AWS Mgmt Console的负载均衡器设置屏幕中加载它们时,我收到错误消息:"公钥证书和私钥不匹配."
以下是我创建密钥的方法:
$ openssl genrsa -des3 -out private.key 2048
$ openssl req -new -key private.key -out apps.mydomain.com.csr
Run Code Online (Sandbox Code Playgroud)
然后我在"重定密钥"过程中将.csr文件提交给GoDaddy.重新生成密钥后,我下载了2个新创建的证书(apps.mydomain.com.crt和gd_bundle.crt).我下载它们选择(Apache)作为服务器的类型(我也试过"其他"和"Cpanel",但所有看起来都是一样的).
此时,我使用以下命令从private.key文件中删除加密:
$ openssl rsa -in private.key -out private.pem
Run Code Online (Sandbox Code Playgroud)
此时,我将返回AWS Mgmt控制台,创建负载均衡器,添加安全服务器重定向,并将以下文件的内容放在屏幕上的相应字段中,并要求设置ssl证书:
private.pem --> Private Key
apps.mydomain.com.crt --> Public Key Certificate
gd_bundle.crt --> Certificate Chain
Run Code Online (Sandbox Code Playgroud)
当我单击"继续按钮"时,出现错误"错误:公钥证书和私钥不匹配".
- 有没有办法我可以测试我从亚马逊收到有效的错误消息?当我非常密切地关注GoDaddy的指令时,我觉得钥匙不匹配似乎很奇怪.
我在创建.csr之前尝试创建没有RSA加密的private.key文件,这似乎没有任何区别.
我也假设我从GoDaddy下载的.crt文件是.PEM格式,但我不知道如何验证这一点.
有任何想法吗?
我需要编写一个脚本,通过HTTPS连接到公司内部网上的一堆站点,并验证他们的SSL证书是否有效; 他们没有过期,他们是为正确的地址等发出的.我们为这些网站使用我们自己的内部公司证书颁发机构,因此我们有CA的公钥来验证证书.
默认情况下,Python在使用HTTPS时接受并使用SSL证书,因此即使证书无效,诸如urllib2和Twisted之类的Python库也会很乐意使用证书.
是否有一个好的库可以让我通过HTTPS连接到一个站点并以这种方式验证它的证书?
如何在Python中验证证书?
我使用这个方法时遇到了问题 X509Store.Certificates.Find
public static X509Certificate2 FromStore(StoreName storeName,
StoreLocation storeLocation, X509FindType findType, string findValue)
{
X509Store store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadOnly);
try
{
//findValue = "7a6fa503ab57b81d6318a51ca265e739a51ce660"
var results = store.Certificates.Find(findType, findValue, true);
return results[0];
}
finally
{
store.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Find方法返回0 results(results.Count == 0
),但如果我将findValue作为常量,则该方法会找到证书.
public static X509Certificate2 FromStore(StoreName storeName,
StoreLocation storeLocation, X509FindType findType, string findValue)
{
X509Store store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadOnly);
try
{
//findValue= "7a6fa503ab57b81d6318a51ca265e739a51ce660"
var results = store.Certificates.Find(findType,
"7a6fa503ab57b81d6318a51ca265e739a51ce660", true);
return results[0];
}
finally
{ …
Run Code Online (Sandbox Code Playgroud) 从今天早上起,我的证书在Android上不再受信任,然后我的应用程序再也无法连接:
Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:137)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93)
at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:591)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:807)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:781)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:770)
Run Code Online (Sandbox Code Playgroud)
如果我尝试在谷歌浏览器(在PC上)没有问题,证书是可信的,但如果我在Android上使用Chrome浏览器,它会告诉我证书不受信任.我能做什么?
我正在尝试连接到使用自签名SSL证书的API.我这样做是使用.NET的HttpWebRequest和HttpWebResponse对象.我得到一个例外:
底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.
我明白这意味着什么.我理解为什么 .NET认为它应该警告我并关闭连接.但在这种情况下,无论如何我都想连接到API,中间人攻击会被诅咒.
那么,我该如何为这个自签名证书添加例外呢?或者是告诉HttpWebRequest/Response不要验证证书的方法?我该怎么办?
由于我对SSL证书很新,以及它们的创建和使用,我想也许StackOverflow成员可以帮助我.
我来自荷兰,在线支付的常见方式是实施iDEAL.主要银行支持的在线支付协议.我必须实施'专业'版本.这包括创建RSA私钥.基于该密钥,我必须创建一个证书并将其上传到网络服务器.
我在Windows机器上并且完全混淆了要做什么.我看了一下OpenSSL网站,因为手册将我转发到该网站以获取SSL工具包.
该手册提供了两个必须执行的命令,以便创建RSA密钥和证书.
命令是:
openssl genrsa -des3 –out priv.pem -passout pass:myPassword 1024
和
openssl req -x509 -new -key priv.pem -passin pass:myPassword -days 3650 -out cert.cer
有没有办法我可以通过Windows机器上的实用程序来做到这一点?我已经下载了PuTTy KeyGenerator.但我不知道该怎么做,我已经创建了一个密钥(SSH-2 RSA,无论是什么......)但是如何使用该密钥创建证书?
我提供了一个名为ABCC_client.store的jks密钥库.当我将此密钥库导入cacerts并尝试连接时,说没有这样的算法错误.PFA堆栈跟踪
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at java.security.Provider$Service.newInstance(Provider.java:1245)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
at org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:61)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:79)
... 32 more
Caused by: java.security.UnrecoverableKeyException: Cannot recover key
at sun.security.provider.KeyProtector.recover(KeyProtector.java:311)
at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:121)
at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:38)
at java.security.KeyStore.getKey(KeyStore.java:763)
at com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:113)
at com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:48)
at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:239)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:170)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at java.security.Provider$Service.newInstance(Provider.java:1221)
... 39 more
Run Code Online (Sandbox Code Playgroud)
但是,如果我独立使用这个密钥库,即不将它添加到cacerts,它就可以工作.
一些谷歌搜索引导我到http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/这说明密码可能与我有所不同密钥和密钥库.
我在Debian 6.0 32位服务器上配置SSL时遇到问题.我对SSL比较新,所以请耐心等待.我尽可能多地提供信息.
注意:已更改真实域名以保护服务器的标识和完整性.
服务器正在使用nginx运行.它配置如下:
ssl_certificate /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_verify_depth 2;
Run Code Online (Sandbox Code Playgroud)
我使用此处描述的方法链接了我的证书
cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt
Run Code Online (Sandbox Code Playgroud)
mysite.ca.crt
签名机构给我的证书在哪里,我的签字机构bundle.crt
也发给我的是CA证书.问题是我没有直接从GlobalSign购买SSL证书,而是通过我的托管服务提供商Singlehop购买.
证书在Safari和Chrome上正确验证,但在Firefox上验证不正确.初步搜索显示它可能是CA的问题.
我探讨了类似问题的答案,但无法找到解决方案,因为我真的不明白每个证书的用途.
我使用openssl的s_client来测试连接,并收到输出,这似乎表明与类似问题相同的问题.错误如下:
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1
Run Code Online (Sandbox Code Playgroud)
可以在此处找到openssl响应的完整详细信息(证书和不必要的信息被截断).
我也看到了警告:
No client certificate CA names sent
Run Code Online (Sandbox Code Playgroud)
这可能是问题所在吗?如何确保nginx发送这些CA名称?
我试图通过直接从GlobalSign下载根CA来解决问题,但收到了同样的错误.我使用update-ca-certificates
命令在我的Debian服务器上更新了根CA ,但没有任何改变.这可能是因为从我的提供商发送的CA是正确的,因此它导致证书被链接两次,这没有帮助.
0 s:/OU=Domain …
Run Code Online (Sandbox Code Playgroud) 在Internet信息服务管理器中,在创建或导入证书时,您可以在Personal和Web Hosting证书存储区之间进行选项.
有什么不同?
windows iis ssl-certificate certificate-store windows-server
ssl-certificate ×10
ssl ×6
openssl ×3
c# ×2
certificate ×2
https ×2
windows ×2
amazon-ec2 ×1
amazon-iam ×1
android ×1
iis ×1
java ×1
jks ×1
python ×1
security ×1
verification ×1
wcf ×1