Android 개발을 위해 keystore.bks 파일을 생성해야 합니다. GUI 도구를 사용하지 않고 bks 키 저장소를 내보내는 방법을 알 수 없습니다. SSH를 통해 연결하는 Google Compute Engine에 서버 공간이 있습니다. 내가 아는 한 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 설치에서는 GUI가 없기 때문에 portecle을 실행할 수 없습니다. 설치 프로그램을 서버에 로드하고 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) in javax.swing.JFrame.(JFrame.java:189) in net.sf.portecle.FPortecle.(FPortecle.java:342) in net.sf.portecle.FPortecle$CreateAndShowGui.run( FPortecle.java:6537) in java.awt.event.InitationEvent.dispatch(InvocableEvent.java:311) in java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) in java.awt.EventQueue.access$500(EventQueue. java:97) in java.awt.EventQueue$3.run(EventQueue.java:709) in java.awt.EventQueue$3.run(EventQueue.java:703) in java.security.AccessController.doPrivileged(Native Method) in java .security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) in java.awt.EventQueue.dispatchEvent(EventQueue.java:726) in java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) in java.awt. java.awt.eventDispatchThread.pumpevents에서 java.eventdispatchThread.pumpevents의 eventDisPatchThread.pumpeventSforFilter (eventDispatchThread.java:116) atchthread.pumpevents (eventDispatchThread ) .java:93)(java.awt.EventDispatchThread.run(EventDispatchThread.java:82))