GoogleAppEngine (Java)에서 자체 도메인을 무료 인증서 (LetsEncrypt)로 사용하는 방법
8526 단어 letsencryptGAE
준비
자체 도메인 설정과 LetsEncrypt 설치는 생략합니다.
Google App Engine Java에서 어떤 배포를 할 수 있다고 가정합니다.
challenge code 및 response code 얻기
letsencrypt가 들어 있는 터미널에서 다음 명령을 실행합니다.
sudo letsencrypt-auto -a manual certonly
먼저 도메인을 지정합니다.
여기서 [YES]를 클릭하면
challenge code와 response code를 알 수 있습니다.
LetsEncrypt에서 인증서 받기
이것을 http://[사용자 정의 도메인]/.well-known/acme-challenge/[challenge code]
라고 건네주고, response code를 돌려주면 OK이므로
public class LetsencryptServlet extends HttpServlet {
public static final Map<String, String> challenges = new HashMap<String, String>();
static {
// challenge codeをKeyにして、response codeを返値する。
challenges.put("hflP1MkFxkoLQyrPKwblQ-BwJC67IKSA0AK2kPsOI8M",
"hflP1MkFxkoLQyrPKwblQ-BwJC67IKSA0AK2kPsOI8M.TEc9CM-bX75lCoGQwUF5BnM2K5iowriH4SOCvwuwJpk");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
if (!req.getRequestURI().startsWith("/.well-known/acme-challenge/")) {
resp.sendError(404);
return;
}
String id = req.getRequestURI().substring("/.well-known/acme-challenge/".length());
if (!challenges.containsKey(id)) {
resp.sendError(404);
return;
}
resp.setContentType("text/plain");
resp.getOutputStream().print(challenges.get(id));
}
}
web.xml<servlet>
<servlet-name>letsencrypt</servlet-name>
<servlet-class>...LetsencryptServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>letsencrypt</servlet-name>
<url-pattern>/.well-known/acme-challenge/*</url-pattern>
</servlet-mapping>
<!-- LetsEncrypt用にここはHTTP通信で行う。 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTP</web-resource-name>
<url-pattern>/.well-known/acme-challenge/*</url-pattern>
</web-resource-collection>
</security-constraint>
<!-- SSL Redirect -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL Redirect</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
letsencrypt와 통신하는 부분은 http에서 deploy합니다.
deploy하여 반영시킨 후 터미널에서 [ENTER] 키를 누릅니다.
잘하면/etc/letsencrypt/live/[사용자 정의 도메인] 아래에 인증서가 완성됩니다.
cert.pem chain.pem fullchain.pem privkey.pem
인증서 변환
openssl 명령을 사용하여 "해독된 PEM으로 인코딩된 RSA 개인 키"를 만듭니다.
openssl rsa -inform pem \
-in live/[カスタムドメイン]/privkey.pem \
-outform pem > live/[カスタムドメイン]/privkey_fixed.pem
PEM으로 인코딩 된 X.509 공개 키 인증서 (fullchain.pem)와 해독 된 PEM으로 인코딩 된 RSA 개인 키 (privkey_fixed.pem)를 AppEngine의 설정 → SSL 인증서 → 새 인증서 업로드에서 업로드합니다.
그런 다음 인증서를 활성화합니다.
체크를 넣은 후 저장 버튼을 누릅니다.
즉시 반영되지 않습니다.
10분 정도 걸리는 것 같아요. 인증서 반영 후 인증서가 활성화되어 있는지 확인합니다.
미래의 도전
ComputeEngine을 사용하여 cron으로 90일마다 git에서 master를 취득하고, challenge code와 response code를 취득해, deploy하고, 증명서를 업로드해… , 장벽이 너무 많아 꽤 어렵습니다.
Reference
이 문제에 관하여(GoogleAppEngine (Java)에서 자체 도메인을 무료 인증서 (LetsEncrypt)로 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tab02733/items/99269e95d14c38874ad0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
letsencrypt가 들어 있는 터미널에서 다음 명령을 실행합니다.
sudo letsencrypt-auto -a manual certonly
먼저 도메인을 지정합니다.
여기서 [YES]를 클릭하면
challenge code와 response code를 알 수 있습니다.
LetsEncrypt에서 인증서 받기
이것을 http://[사용자 정의 도메인]/.well-known/acme-challenge/[challenge code]
라고 건네주고, response code를 돌려주면 OK이므로
public class LetsencryptServlet extends HttpServlet {
public static final Map<String, String> challenges = new HashMap<String, String>();
static {
// challenge codeをKeyにして、response codeを返値する。
challenges.put("hflP1MkFxkoLQyrPKwblQ-BwJC67IKSA0AK2kPsOI8M",
"hflP1MkFxkoLQyrPKwblQ-BwJC67IKSA0AK2kPsOI8M.TEc9CM-bX75lCoGQwUF5BnM2K5iowriH4SOCvwuwJpk");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
if (!req.getRequestURI().startsWith("/.well-known/acme-challenge/")) {
resp.sendError(404);
return;
}
String id = req.getRequestURI().substring("/.well-known/acme-challenge/".length());
if (!challenges.containsKey(id)) {
resp.sendError(404);
return;
}
resp.setContentType("text/plain");
resp.getOutputStream().print(challenges.get(id));
}
}
web.xml<servlet>
<servlet-name>letsencrypt</servlet-name>
<servlet-class>...LetsencryptServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>letsencrypt</servlet-name>
<url-pattern>/.well-known/acme-challenge/*</url-pattern>
</servlet-mapping>
<!-- LetsEncrypt用にここはHTTP通信で行う。 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTP</web-resource-name>
<url-pattern>/.well-known/acme-challenge/*</url-pattern>
</web-resource-collection>
</security-constraint>
<!-- SSL Redirect -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL Redirect</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
letsencrypt와 통신하는 부분은 http에서 deploy합니다.
deploy하여 반영시킨 후 터미널에서 [ENTER] 키를 누릅니다.
잘하면/etc/letsencrypt/live/[사용자 정의 도메인] 아래에 인증서가 완성됩니다.
cert.pem chain.pem fullchain.pem privkey.pem
인증서 변환
openssl 명령을 사용하여 "해독된 PEM으로 인코딩된 RSA 개인 키"를 만듭니다.
openssl rsa -inform pem \
-in live/[カスタムドメイン]/privkey.pem \
-outform pem > live/[カスタムドメイン]/privkey_fixed.pem
PEM으로 인코딩 된 X.509 공개 키 인증서 (fullchain.pem)와 해독 된 PEM으로 인코딩 된 RSA 개인 키 (privkey_fixed.pem)를 AppEngine의 설정 → SSL 인증서 → 새 인증서 업로드에서 업로드합니다.
그런 다음 인증서를 활성화합니다.
체크를 넣은 후 저장 버튼을 누릅니다.
즉시 반영되지 않습니다.
10분 정도 걸리는 것 같아요. 인증서 반영 후 인증서가 활성화되어 있는지 확인합니다.
미래의 도전
ComputeEngine을 사용하여 cron으로 90일마다 git에서 master를 취득하고, challenge code와 response code를 취득해, deploy하고, 증명서를 업로드해… , 장벽이 너무 많아 꽤 어렵습니다.
Reference
이 문제에 관하여(GoogleAppEngine (Java)에서 자체 도메인을 무료 인증서 (LetsEncrypt)로 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tab02733/items/99269e95d14c38874ad0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public class LetsencryptServlet extends HttpServlet {
public static final Map<String, String> challenges = new HashMap<String, String>();
static {
// challenge codeをKeyにして、response codeを返値する。
challenges.put("hflP1MkFxkoLQyrPKwblQ-BwJC67IKSA0AK2kPsOI8M",
"hflP1MkFxkoLQyrPKwblQ-BwJC67IKSA0AK2kPsOI8M.TEc9CM-bX75lCoGQwUF5BnM2K5iowriH4SOCvwuwJpk");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
if (!req.getRequestURI().startsWith("/.well-known/acme-challenge/")) {
resp.sendError(404);
return;
}
String id = req.getRequestURI().substring("/.well-known/acme-challenge/".length());
if (!challenges.containsKey(id)) {
resp.sendError(404);
return;
}
resp.setContentType("text/plain");
resp.getOutputStream().print(challenges.get(id));
}
}
<servlet>
<servlet-name>letsencrypt</servlet-name>
<servlet-class>...LetsencryptServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>letsencrypt</servlet-name>
<url-pattern>/.well-known/acme-challenge/*</url-pattern>
</servlet-mapping>
<!-- LetsEncrypt用にここはHTTP通信で行う。 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTP</web-resource-name>
<url-pattern>/.well-known/acme-challenge/*</url-pattern>
</web-resource-collection>
</security-constraint>
<!-- SSL Redirect -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL Redirect</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
cert.pem chain.pem fullchain.pem privkey.pem
openssl 명령을 사용하여 "해독된 PEM으로 인코딩된 RSA 개인 키"를 만듭니다.
openssl rsa -inform pem \
-in live/[カスタムドメイン]/privkey.pem \
-outform pem > live/[カスタムドメイン]/privkey_fixed.pem
PEM으로 인코딩 된 X.509 공개 키 인증서 (fullchain.pem)와 해독 된 PEM으로 인코딩 된 RSA 개인 키 (privkey_fixed.pem)를 AppEngine의 설정 → SSL 인증서 → 새 인증서 업로드에서 업로드합니다.
그런 다음 인증서를 활성화합니다.
체크를 넣은 후 저장 버튼을 누릅니다.
즉시 반영되지 않습니다.
10분 정도 걸리는 것 같아요. 인증서 반영 후 인증서가 활성화되어 있는지 확인합니다.
미래의 도전
ComputeEngine을 사용하여 cron으로 90일마다 git에서 master를 취득하고, challenge code와 response code를 취득해, deploy하고, 증명서를 업로드해… , 장벽이 너무 많아 꽤 어렵습니다.
Reference
이 문제에 관하여(GoogleAppEngine (Java)에서 자체 도메인을 무료 인증서 (LetsEncrypt)로 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tab02733/items/99269e95d14c38874ad0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(GoogleAppEngine (Java)에서 자체 도메인을 무료 인증서 (LetsEncrypt)로 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tab02733/items/99269e95d14c38874ad0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)