java - 通过 SSL 从 EMR 集群 : One approach 将 mysql java 连接器连接到 AWS Aurora

标签 java amazon-web-services ssl amazon-emr amazon-aurora

如何通过 SSL 将作业从 EMR 集群连接到 Aurora?论坛上散布了很多信息,为这个问题提供了部分解决方案,所以我在这里总结一下。

最佳答案

论坛和 stackoverflow 上散布着很多关于通过 SSL 通过 SSL 从 mysql java 连接器连接到 AWS Aurora 的信息,如果我没有包含所有引用资料,请见谅。

长话短说:使用 ssl 将在 EMR 集群中运行的程序连接到 Aurora 有两个主要问题:

1) 仅将 Amazon 提供的 rds-combined-ca-bundle.pem 导入 keystore 是行不通的,因为它会显示“PKIX 路径构建失败”错误。

2) java 属性 javax.net.ssl.keyStore 将无法从集群的从站获得,因此应用程序将找不到 keyStore,它会产生“通信链接失败”

1) 的原因似乎与文件 rds-combined-ca-bundle.pem 有多个证书这一事实有关,所以在我现在没有引用的论坛中,建议的解决方案是拆分这些证书。 Aurora的证书是第8位:

-----BEGIN CERTIFICATE----- MIID/DCCAuSgAwIBAgIBQzANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMTU0MDRaFw0y MDAzMDUyMTU0MDRaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE UyB1cy1lYXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDI UIuwh8NusKHk1SqPXcP7OqxY3S/M2ZyQWD3w7Bfihpyyy/fc1w0/suIpX3kbMhAV 2ESwged2/2zSx4pVnjp/493r4luhSqQYzru78TuPt9bhJIJ51WXunZW2SWkisSaf USYUzVN9ezR/bjXTumSUQaLIouJt3OHLX49s+3NAbUyOI8EdvgBQWD68H1epsC0n CI5s+pIktyOZ59c4DCDLQcXErQ+tNbDC++oct1ANd/q8p9URonYwGCGOBy7sbCYq 9eVHh1Iy2M+SNXddVOGw5EuruvHoCIQyOz5Lz4zSuZA9dRbrfztNOpezCNYu6NKM n+hzcvdiyxv77uNm8EaxAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBQSQG3TmMe6Sa3KufaPBa72v4QFDzAfBgNV HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA L/mOZfB3187xTmjOHMqN2G2oSKHBKiQLM9uv8+97qT+XR+TVsBT6b3yoPpMAGhHA Pc7nxAF5gPpuzatx0OTLPcmYucFmfqT/1qA5WlgCnMNtczyNMH97lKFTNV7Njtek jWEzAEQSyEWrkNpNlC4j6kMYyPzVXQeXUeZTgJ9FNnVZqmvfjip2N22tawMjrCn5 7KN/zN65EwY2oO9XsaTwwWmBu3NrDdMbzJnbxoWcFWj4RBwanR1XjQOVNhDwmCOl /1Et13b8CPyj69PC8BOVU6cfTSx8WUVy0qvYOKHNY9Bqa5BDnIL3IVmUkeTlM1mt enRpyBj+Bk9rh/ICdiRKmA== -----END CERTIFICATE-----

因此,如果您将此段提取到名为 bundle8.pem 的文件中,您将按如下方式生成 key :

keytool -import -alias mysqlServerCACert -file bundle8.pem -keystore truststore

2)的解决方法是将javax.net.ssl.keyStore设置为命令参数,对于spark-submit的情况,选项应该是'--driver-java-options':

spark-submit --deploy-mode cluster --driver-java-options='-Djavax.net.ssl.trustStore=truststore' --files s3://path/to/truststore ..other spark options

作为使用 key 工具生成的文件的“信任库”。 --driver-java-options 将允许信任库文件在从属环境中可用。

引用:

连接到 Amazon Aurora 数据库集群: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connect.html

使用 SSL 连接 Mysql Java Connector https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-using-ssl.html

关于java - 通过 SSL 从 EMR 集群 : One approach 将 mysql java 连接器连接到 AWS Aurora,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39628643/

相关文章:

google-app-engine - CDN 背后的 App Engine 灵活 (FaSTLy)

java - 需要资源来从 SCRATCH 学习 Java Web 服务

amazon-web-services - 停止 EC2 实例时如何保留数据

node.js - 带有 KnexJs 的 AWS Lambda(node12.x) 仅在第一次运行时调用,随后会失败

java - aws.accessKeyId 和 aws.secretKey 未被读取

带有 SSL : handshake error 的 Python SMTP 服务器

apache - 在 .htaccess 文件中使用条件和变量

java - Lucene 搜索停止工作

java.lang.NoClassDefFoundError : Could not initialize class com. googlecode.objectify.ObjectifyService

java - Android - findViewById(int id) 始终返回 null