我需要生成一个 keystore.bks 文件以用于 android 开发。我无法弄清楚如何在不使用 GUI 工具的情况下导出 bks 密钥库。我在 Google Compute Engine 上有服务器空间,我通过 SSH 连接到该空间。据我所知,没有 GUI 选项。
我在 Tomcat 上设置了 HTTPS,执行以下操作:
Run $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
You will have to answer a few questions. Most are intuitive. But:
Specify same passwords for both: key store and key.
After completion you will have new key store with new key.
As the next step you must edit $CATALINA_BASE/conf/server.xml file: Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystorePass="your_password_from_step_3" />
我做了那件事;现在我需要将我的密钥库导出为 keystore.bks,但我找不到方法来做到这一点 - 至少不是我能理解的方法。我对 Linux 非常陌生,确实需要详细说明; 1. 使用此命令“blah blah blah”下载 2. 运行此命令“blah blah blah”。抱歉我的无能,但我正在努力完成一些我认为可能相对简单的事情。
这些是我得到的指示:
- 去http://portecle.sourceforge.net/并下载Portecle
- 通过 Portecle 打开您的 JKS 密钥库
- 导出您的证书
- 创建新的 BKS 密钥库
- 导入您的证书并将 BKS 密钥库保存为“keystore.bks”
- 在 Android 应用程序中,将 keystore.bks 文件替换为您刚刚创建的 BKS 密钥库
- 在 app.properties 中根据需要修改“server.ssl.keystore_password”
不幸的是,我无法在 Linux 安装中执行 portecle,因为它没有 GUI。我尝试将安装程序加载到服务器并运行 java -jar portecle.jar 但失败:
2015 年 12 月 19 日上午 2:33:37 java.util.prefs.FileSystemPreferences$1 运行信息:已创建用户首选项目录。线程“AWT-EventQueue-0”中出现异常 java.awt.HeadlessException:未设置 X11 DISPLAY 变量,但该程序执行了需要它的操作。在 java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204) 在 java.awt.Window.(Window.java:536) 在 java.awt.Frame.(Frame.java:420) 在 java.awt.Frame。 (Frame.java:385) 在 javax.swing.JFrame.(JFrame.java:189) 在 net.sf.portecle.FPortecle.(FPortecle.java:342) 在 net.sf.portecle.FPortecle$CreateAndShowGui.run( FPortecle.java:6537) 在 java.awt.event.InitationEvent.dispatch(InvocableEvent.java:311) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 在 java.awt.EventQueue.access$500(EventQueue. java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3.run(EventQueue.java:703) 在 java.security.AccessController.doPrivileged(Native Method) 在 java .security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt. EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread) .java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)